class ChunkyPNG::Chunk::InternationalText
The InternationalText
(iTXt) chunk contains keyword/value metadata about the PNG stream, translated to a given locale.
The metadata in this chunk can be encoded using UTF-8 characters. Moreover, it is possible to define the language of the metadata, and give a translation of the keyword name. Finally, it supports bot compressed and uncompressed values.
www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.iTXt
@see ChunkyPNG::Chunk::Text
@see ChunkyPNG::Chunk::CompressedText
Attributes
Public Class Methods
ChunkyPNG::Chunk::Base::new
# File lib/chunky_png/chunk.rb 384 def initialize(keyword, text, language_tag = "", translated_keyword = "", compressed = ChunkyPNG::UNCOMPRESSED_CONTENT, compression = ChunkyPNG::COMPRESSION_DEFAULT) 385 super("iTXt") 386 @keyword = keyword 387 @text = text 388 @language_tag = language_tag 389 @translated_keyword = translated_keyword 390 @compressed = compressed 391 @compression = compression 392 end
Reads the tTXt chunk. @param type [String] The four character chunk type indicator (= “iTXt”). @param content [String] The content read from the chunk. @return [ChunkyPNG::Chunk::InternationalText] The new End
chunk instance. @raise [ChunkyPNG::InvalidUTF8] If the chunk contains data that is not UTF8-encoded text. @raise [ChunkyPNG::NotSupported] If the chunk refers to an unsupported compression method.
Currently uncompressed data and deflate are supported.
# File lib/chunky_png/chunk.rb 401 def self.read(type, content) 402 keyword, compressed, compression, language_tag, translated_keyword, text = content.unpack("Z*CCZ*Z*a*") 403 raise ChunkyPNG::NotSupported, "Compression flag #{compressed.inspect} not supported!" unless compressed == ChunkyPNG::UNCOMPRESSED_CONTENT || compressed == ChunkyPNG::COMPRESSED_CONTENT 404 raise ChunkyPNG::NotSupported, "Compression method #{compression.inspect} not supported!" unless compression == ChunkyPNG::COMPRESSION_DEFAULT 405 406 text = Zlib::Inflate.inflate(text) if compressed == ChunkyPNG::COMPRESSED_CONTENT 407 408 text.force_encoding("utf-8") 409 raise ChunkyPNG::InvalidUTF8, "Invalid unicode encountered in iTXt chunk" unless text.valid_encoding? 410 411 translated_keyword.force_encoding("utf-8") 412 raise ChunkyPNG::InvalidUTF8, "Invalid unicode encountered in iTXt chunk" unless translated_keyword.valid_encoding? 413 414 new(keyword, text, language_tag, translated_keyword, compressed, compression) 415 end
Public Instance Methods
Assembles the content to write to the stream for this chunk. @return [String] The binary content that should be written to the datastream.
# File lib/chunky_png/chunk.rb 419 def content 420 text_field = text.encode("utf-8") 421 text_field = compressed == ChunkyPNG::COMPRESSED_CONTENT ? Zlib::Deflate.deflate(text_field) : text_field 422 423 [keyword, compressed, compression, language_tag, translated_keyword.encode("utf-8"), text_field].pack("Z*CCZ*Z*a*") 424 end