lib/chunky_png/chunk.rb in chunky_png-1.1.2 vs lib/chunky_png/chunk.rb in chunky_png-1.2.0

- old
+ new

@@ -175,15 +175,49 @@ # @see ChunkyPNG::Chunk::Transparency # @see ChunkyPNG::Palette class Palette < Generic end - # A transparency (tRNS) chunk contains the alpha channel for the colors - # defined in the Palette (PLTE) chunk + # A transparency (tRNS) chunk defines the transparency for an image. # + # * For indexed images, it contains the alpha channel for the colors defined in the Palette (PLTE) chunk. + # * For grayscale images, it contains the grayscale teint that should be considered fully transparent. + # * For truecolor images, it contains the color that should be considered fully transparent. + # + # Images having a color mode that already includes an alpha channel, this chunk should not be included. + # # @see ChunkyPNG::Chunk::Palette # @see ChunkyPNG::Palette class Transparency < Generic + + # Returns the alpha channel for the palette of an indexed image. + # + # This method should only be used for images having color mode ChunkyPNG::COLOR_INDEXED (3). + # + # @return [Array<Integer>] Returns an array of alpha channel values [0-255]. + def palette_alpha_channel + content.unpack('C*') + end + + # Returns the truecolor entry to be replaced by transparent pixels, + # + # This method should only be used for images having color mode ChunkyPNG::COLOR_TRUECOLOR (2). + # + # @return [Integer] The color to replace with fully transparent pixels. + def truecolor_entry(bit_depth) + values = content.unpack('nnn').map { |c| ChunkyPNG::Canvas.send(:"decode_png_resample_#{bit_depth}bit_value", c) } + ChunkyPNG::Color.rgb(*values) + end + + # Returns the grayscale entry to be replaced by transparent pixels. + # + # This method should only be used for images having color mode ChunkyPNG::COLOR_GRAYSCALE (0). + # + # @return [Integer] The (grayscale) color to replace with fully transparent pixels. + def grayscale_entry(bit_depth) + value = ChunkyPNG::Canvas.send(:"decode_png_resample_#{bit_depth}bit_value", content.unpack('n')[0]) + ChunkyPNG::Color.grayscale(value) + end end class ImageData < Generic def self.read(type, content)