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)