Class: ChunkyPNG::Chunk::Physical

Inherits:
Base
  • Object
show all
Defined in:
lib/chunky_png/chunk.rb

Overview

The Physical (pHYs) chunk specifies the intended pixel size or aspect ratio for display of the image.

Constant Summary collapse

INCHES_PER_METER =
0.0254

Instance Attribute Summary collapse

Attributes inherited from Base

#type

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#write, #write_with_crc

Constructor Details

#initialize(ppux, ppuy, unit = :unknown) ⇒ Physical

Returns a new instance of Physical.

Raises:

  • (ArgumentError)

365
366
367
368
369
# File 'lib/chunky_png/chunk.rb', line 365

def initialize(ppux, ppuy, unit = :unknown)
  raise ArgumentError, "unit must be either :meters or :unknown" unless [:meters, :unknown].member?(unit)
  super("pHYs")
  @ppux, @ppuy, @unit = ppux, ppuy, unit
end

Instance Attribute Details

#ppuxObject

Returns the value of attribute ppux


363
364
365
# File 'lib/chunky_png/chunk.rb', line 363

def ppux
  @ppux
end

#ppuyObject

Returns the value of attribute ppuy


363
364
365
# File 'lib/chunky_png/chunk.rb', line 363

def ppuy
  @ppuy
end

#unitObject

Returns the value of attribute unit


363
364
365
# File 'lib/chunky_png/chunk.rb', line 363

def unit
  @unit
end

Class Method Details

.read(type, content) ⇒ Object


381
382
383
384
385
# File 'lib/chunky_png/chunk.rb', line 381

def self.read(type, content)
  ppux, ppuy, unit = content.unpack("NNC")
  unit = unit == 1 ? :meters : :unknown
  new(ppux, ppuy, unit)
end

Instance Method Details

#contentString

Assembles the content to write to the stream for this chunk.

Returns:

  • (String)

    The binary content that should be written to the datastream.


389
390
391
# File 'lib/chunky_png/chunk.rb', line 389

def content
  [ppux, ppuy, unit == :meters ? 1 : 0].pack("NNC")
end

#dpixObject


371
372
373
374
# File 'lib/chunky_png/chunk.rb', line 371

def dpix
  raise ChunkyPNG::UnitsUnknown, "the PNG specifies its physical aspect ratio, but does not specify the units of its pixels' physical dimensions" unless unit == :meters
  ppux * INCHES_PER_METER
end

#dpiyObject


376
377
378
379
# File 'lib/chunky_png/chunk.rb', line 376

def dpiy
  raise ChunkyPNG::UnitsUnknown, "the PNG specifies its physical aspect ratio, but does not specify the units of its pixels' physical dimensions" unless unit == :meters
  ppuy * INCHES_PER_METER
end