PrismatIQ::PNGExtractor
Inherits PrismatIQ::BinaryReader < Reference < Object
PNGExtractor: Helper for extracting PNG-encoded image data from ICO entries
Modern ICO files often contain PNG-compressed images instead of traditional BMP/DIB data. This class provides a clean interface to decode PNG data extracted from ICO entries.
Features
- Decodes PNG data embedded in ICO files to RGBA pixels
- Uses CrImage for PNG decoding
- Provides both buffer and file-based decoding paths
- Size validation to prevent DoS from oversized embedded images
Usage
extractor = PNGExtractor.new(png_bytes)
if extractor.valid?
image = extractor.to_image
puts "Decoded PNG: #{image.width}x#{image.height}"
end
Constants
MAX_PNG_SIZE = 50000000_i64
Maximum allowed PNG size in bytes (50 MB default)
Constructors
new(data : Slice(UInt8), config : Config = Config.default)
Class methods
extract_from_ico(ico_data : Slice(UInt8), max_size : Int64 = MAX_PNG_SIZE) : PNGExtractor | Nil
from_slice?(data : Slice(UInt8)) : PNGExtractor | Nil
Instance methods
height
to_image
to_rgba
valid?
width