Class: Quadtone::QuadFile
- Inherits:
-
Object
- Object
- Quadtone::QuadFile
- Defined in:
- lib/quadtone/quad_file.rb
Constant Summary collapse
- ChannelAliases =
{ 'C' => 'c', 'M' => 'm', 'Y' => 'y', 'K' => 'k', 'c' => 'lc', 'm' => 'lm', 'k' => 'lk', }
Instance Attribute Summary collapse
-
#curve_set ⇒ Object
Returns the value of attribute curve_set.
Instance Method Summary collapse
-
#initialize(profile) ⇒ QuadFile
constructor
A new instance of QuadFile.
-
#load(quad_file) ⇒ Object
Read QTR quad (curve) file.
- #parse_channel_list(line) ⇒ Object
Constructor Details
Instance Attribute Details
#curve_set ⇒ Object
Returns the value of attribute curve_set.
5 6 7 |
# File 'lib/quadtone/quad_file.rb', line 5 def curve_set @curve_set end |
Instance Method Details
#load(quad_file) ⇒ Object
Read QTR quad (curve) file
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/quadtone/quad_file.rb', line 25 def load(quad_file) ;;warn "reading #{quad_file}" lines = Path.new(quad_file).open.readlines.map { |line| line.chomp.force_encoding('ISO-8859-1') } # process header channels = parse_channel_list(lines.shift) channels.each do |channel| samples = (0..255).to_a.map do |input| lines.shift while lines.first =~ /^#/ line = lines.shift line =~ /^(\d+)$/ or raise "Unexpected value: #{line.inspect}" output = $1.to_i Sample.new(input: Color::Gray.new(k: 100 * (input / 255.0)), output: Color::Gray.new(k: 100 * (output / 65535.0))) end if @profile.inks.include?(channel) @curve_set.curves << Curve.new(channel: channel, samples: samples) end end end |
#parse_channel_list(line) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/quadtone/quad_file.rb', line 44 def parse_channel_list(line) # "## QuadToneRIP K,C,M,Y,LC,LM" # "## QuadToneRIP KCMY" line =~ /^##\s+QuadToneRIP\s+(.*)$/ or raise "Unexpected header line: #{line.inspect}" channel_list = $1 case channel_list when /,/ channel_list.split(',') else channel_list.chars.map { |c| ChannelAliases[c] } end.map { |c| c.downcase.to_sym } end |