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.



59
60
61
62
# File 'lib/chunky_png/chunk.rb', line 59

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:



54
55
56
# File 'lib/chunky_png/chunk.rb', line 54

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.



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

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.



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

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