Class: PNM::Image
- Inherits:
-
Object
- Object
- PNM::Image
- Defined in:
- lib/pnm/image.rb
Overview
Abstract base class for PBM
, PGM
, and PPM
images.
Images can be created from pixel values, see PNM.create, or read from a file or I/O stream, see PNM.read.
See PNM module for examples.
Instance Attribute Summary collapse
-
#comment ⇒ Object
readonly
An optional multiline comment string (or
nil
). -
#height ⇒ Object
readonly
The height of the image in pixels.
-
#maxgray ⇒ Object
readonly
The maximum gray or color value (for PBM always set to 1).
-
#pixels ⇒ Object
readonly
The pixel data, given as a two-dimensional array.
-
#width ⇒ Object
readonly
The width of the image in pixels.
Class Method Summary collapse
-
.create(pixels, type: nil, maxgray: nil, comment: nil) ⇒ Object
Creates an image from a two-dimensional array of bilevel, gray, or RGB values.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Equality — Two images are considered equal if they have the same pixel values, type, maxgray, and comments.
-
#info ⇒ Object
(also: #to_s)
Returns a string with a short image format description.
-
#inspect ⇒ Object
Returns a string representation for debugging.
-
#type ⇒ Object
The type of the image.
-
#write(file, add_extension: false, encoding: :binary) ⇒ Object
Writes the image to
file
(a filename or an IO object).
Instance Attribute Details
#comment ⇒ Object (readonly)
An optional multiline comment string (or nil
).
33 34 35 |
# File 'lib/pnm/image.rb', line 33 def comment @comment end |
#height ⇒ Object (readonly)
The height of the image in pixels.
22 23 24 |
# File 'lib/pnm/image.rb', line 22 def height @height end |
#maxgray ⇒ Object (readonly)
The maximum gray or color value (for PBM always set to 1). See PNM.create for details.
26 27 28 |
# File 'lib/pnm/image.rb', line 26 def maxgray @maxgray end |
#pixels ⇒ Object (readonly)
The pixel data, given as a two-dimensional array. See PNM.create for details.
30 31 32 |
# File 'lib/pnm/image.rb', line 30 def pixels @pixels end |
#width ⇒ Object (readonly)
The width of the image in pixels.
19 20 21 |
# File 'lib/pnm/image.rb', line 19 def width @width end |
Class Method Details
.create(pixels, type: nil, maxgray: nil, comment: nil) ⇒ Object
Creates an image from a two-dimensional array of bilevel, gray, or RGB values.
This method should be called as PNM.create. See there for a description of pixel data formats and available options.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/pnm/image.rb', line 41 def self.create(pixels, type: nil, maxgray: nil, comment: nil) assert_valid_array(pixels) assert_valid_maxgray(maxgray) assert_valid_comment(comment) type = sanitize_and_assert_valid_type(type) type ||= detect_type(pixels, maxgray) # except for type detection, the maxgray option must be ignored for PBM maxgray = nil if type == :pbm image_class = case type when :pbm PBMImage when :pgm PGMImage when :ppm PPMImage end image_class.new(pixels, maxgray, comment) end |
Instance Method Details
#==(other) ⇒ Object
Equality — Two images are considered equal if they have the same pixel values, type, maxgray, and comments.
127 128 129 130 131 132 |
# File 'lib/pnm/image.rb', line 127 def ==(other) return true if other.equal?(self) return false unless other.instance_of?(self.class) type == other.type && maxgray == other.maxgray && comment == other.comment && pixels == other.pixels end |
#info ⇒ Object Also known as: to_s
Returns a string with a short image format description.
114 115 116 |
# File 'lib/pnm/image.rb', line 114 def info "#{type.to_s.upcase} #{width}x#{height} #{type_string}" end |
#inspect ⇒ Object
Returns a string representation for debugging.
121 122 123 |
# File 'lib/pnm/image.rb', line 121 def inspect # implemented by subclasses end |
#type ⇒ Object
The type of the image. See PNM.create for details.
14 15 16 |
# File 'lib/pnm/image.rb', line 14 def type # implemented by subclasses end |
#write(file, add_extension: false, encoding: :binary) ⇒ Object
Writes the image to file
(a filename or an IO object).
When add_extension
is set to true
(default: false
) the appropriate file extension is added to the provided filename (.pbm
, .pgm
, or .ppm
).
The encoding can be set using the encoding
keyword argument, valid options are :binary
(default) and :ascii
.
Returns the number of bytes written.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/pnm/image.rb', line 96 def write(file, add_extension: false, encoding: :binary) content = case encoding when :ascii to_ascii when :binary to_binary end if file.is_a?(String) filename = add_extension ? "#{file}.#{type}" : file File.binwrite(filename, content) else file.binmode file.write content end end |