class

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

Nested types