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.