Author: lryan
Date: Wed Mar 18 07:01:04 2009
New Revision: 755492
URL: http://svn.apache.org/viewvc?rev=755492&view=rev
Log:
Bug in VM for JPEG image output of RGBA colorspace images caused them to be
output as CMYK. Force opaque JPEG images to RGB colorspace to fix.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java?rev=755492&r1=755491&r2=755492&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java
Wed Mar 18 07:01:04 2009
@@ -80,12 +80,21 @@
if (isOpaque) {
byte[] lastBytes = minBytes;
int prevReductionPct = reductionPct;
+
+ // Workaround for bug in JPEG image writer
+ // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6444933
+ // Writer seems to think color space is CMYK and not RGBA. In this
+ // case the image is fully opaque so we can just down-convert to just
RGB.
+ BufferedImage rgbOnlyImage = new
BufferedImage(bufferedImage.getWidth(),
+ bufferedImage.getHeight(),
+ BufferedImage.TYPE_INT_RGB);
+ rgbOnlyImage.getGraphics().drawImage(bufferedImage, 0, 0, null);
ImageWriter writer =
ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(config.getJpegCompression());
outputter = new ImageIOOutputter(writer, param);
- write(bufferedImage);
+ write(rgbOnlyImage);
// Only use JPEG if it offers a significant reduction over other
methods
if (reductionPct > prevReductionPct + 20) {
useJpeg = true;