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.



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.



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.



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.



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