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 63 64 65 66 |
# 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 = if type == :pbm nil else maxgray end 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.
130 131 132 133 134 135 |
# File 'lib/pnm/image.rb', line 130 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.
117 118 119 |
# File 'lib/pnm/image.rb', line 117 def info "#{type.to_s.upcase} #{width}x#{height} #{type_string}" end |
#inspect ⇒ Object
Returns a string representation for debugging.
124 125 126 |
# File 'lib/pnm/image.rb', line 124 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.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/pnm/image.rb', line 100 def write(file, add_extension: false, encoding: :binary) content = if encoding == :ascii to_ascii elsif encoding == :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 |