Class: Pruim::PBM
Overview
Tiny PBM parser integrated with Prium codecs.
Instance Method Summary collapse
- #can_decode?(stream) ⇒ Boolean
-
#can_encode?(image) ⇒ Boolean
Can only encode monocrome images.
-
#decode(stream) ⇒ Object
Read in a pbm file from an io object.
- #encode(image, stream) ⇒ Object
-
#encode_will_degrade?(image) ⇒ Boolean
Will only save first page of image.
Methods included from Codec
for_filename, for_filename_name, for_name, new_for_filename, new_for_filename_name, new_for_name, register, #text
Instance Method Details
#can_decode?(stream) ⇒ Boolean
54 55 56 57 58 |
# File 'lib/pruim/pbm.rb', line 54 def can_decode?(stream) header = stream.gets stream.rewind return header == "P1\n" end |
#can_encode?(image) ⇒ Boolean
Can only encode monocrome images.
61 62 63 |
# File 'lib/pruim/pbm.rb', line 61 def can_encode?(image) return image.mode == :monochrome end |
#decode(stream) ⇒ Object
Read in a pbm file from an io object.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/pruim/pbm.rb', line 10 def decode(stream) header = stream.gets lines = [] until stream.eof? lines << stream.gets end data = [] image = nil page = nil w, h = nil, nil y = 0 comment = '' lines.each do |line| if line[0] == '#' comment << line.chomp.sub(/\A#/, '') next end if !w w , h = line.chomp.split(' ').map { |v| v.to_i } next end # Converts 1 to true, rest to false. bits = line.chomp.split('').map { |v| (v == '1') } data += bits end image = Image.new(w, h, :mode => :monochrome, :data => data) image.comment = comment return image end |
#encode(image, stream) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/pruim/pbm.rb', line 40 def encode(image, stream) stream.puts("P1") stream.puts("##{image.comment}") if image.comment stream.puts("#{image.w} #{image.h}") page = image.pages.first for y in (0...page.h) do for x in (0...page.w) do white = page.getpixel!(x, y) stream.write(white ? '1' : '0') end stream.puts() end end |
#encode_will_degrade?(image) ⇒ Boolean
Will only save first page of image.
66 67 68 |
# File 'lib/pruim/pbm.rb', line 66 def encode_will_degrade?(image) return (image.pages.size > 1) end |