Class: ChunkyPNG::Chunk::Base Abstract

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

Overview

This class is abstract.

The base chunk class is the superclass for every chunk type. It contains methods to write the chunk to an output stream.

A subclass should implement the content method, which gets called when the chunk gets written to a PNG datastream

Direct Known Subclasses

CompressedText, End, Generic, Header, Text

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, attributes = {}) ⇒ Base

Initializes the chunk instance.

Parameters:

  • type (String)

    The four character chunk type indicator.

  • attributes (Hash) (defaults to: {})

    A hash of attributes to set on this chunk.



67
68
69
70
# File 'lib/chunky_png/chunk.rb', line 67

def initialize(type, attributes = {})
  self.type = type
  attributes.each { |k, v| send("#{k}=", v) }
end

Instance Attribute Details

#typeString

The four-character type indicator for the chunk. This field is used to find the correct class for a chunk when it is loaded from a PNG stream.

Returns:



62
63
64
# File 'lib/chunky_png/chunk.rb', line 62

def type
  @type
end

Instance Method Details

#write(io) ⇒ Object

Writes the chunk to the IO stream.

It will call the content method to get the content for this chunk, and will calculate and append the checksum automatically.

Parameters:

  • io (IO)

    The IO stream to write to.



86
87
88
# File 'lib/chunky_png/chunk.rb', line 86

def write(io)
  write_with_crc(io, content || '')
end

#write_with_crc(io, content) ⇒ Object

Writes the chunk to the IO stream, using the provided content. The checksum will be calculated and appended to the stream.

Parameters:

  • io (IO)

    The IO stream to write to.

  • content (String)

    The content for this chunk.



76
77
78
79
# File 'lib/chunky_png/chunk.rb', line 76

def write_with_crc(io, content)
  io << [content.length].pack('N') << type << content
  io << [Zlib.crc32(content, Zlib.crc32(type))].pack('N')
end