lib/image_voodoo/awt.rb in image_voodoo-0.8.5 vs lib/image_voodoo/awt.rb in image_voodoo-0.8.6

- old
+ new

@@ -16,11 +16,16 @@ java_import javax.imageio.ImageIO java_import javax.imageio.IIOImage java_import javax.imageio.ImageWriteParam java_import javax.imageio.stream.FileImageOutputStream java_import javax.swing.JFrame + java_import javax.imageio.IIOException + require 'CMYKDemo.jar' + java_import org.monte.media.jpeg.CMYKJPEGImageReader + java_import org.monte.media.jpeg.CMYKJPEGImageReaderSpi + # FIXME: Move and rewrite in terms of new shape ## # # *AWT* (experimental) Add a border to the image and yield/return a new # image. The following options are supported: @@ -139,23 +144,32 @@ RGB = BufferedImage::TYPE_INT_RGB SCALE_SMOOTH = java.awt.Image::SCALE_SMOOTH def self.with_image_impl(file) format = detect_format_from_input(file) - buffered_image = ImageIO.read(file) + buffered_image = read_image_from_input(file) buffered_image ? ImageVoodoo.new(buffered_image, format) : nil end + def self.read_image_from_input(input) + ImageIO.read(input) + rescue IIOException + cmyk_reader = CMYKJPEGImageReader.new(CMYKJPEGImageReaderSpi.new) + cmyk_reader.setInput(ImageIO.createImageInputStream(input)) + cmyk_reader.read(0) + end + def self.detect_format_from_input(input) stream = ImageIO.createImageInputStream(input) readers = ImageIO.getImageReaders(stream) readers.has_next ? readers.next.format_name.upcase : nil end def self.with_bytes_impl(bytes) input_stream = ByteArrayInputStream.new(bytes) format = detect_format_from_input(input_stream) - ImageVoodoo.new(ImageIO.read(input_stream), format) + input_stream.reset + ImageVoodoo.new(read_image_from_input(input_stream), format) end # # Converts a RGB hex value into a java.awt.Color object or dies trying # with an ArgumentError.