Author: lindner
Date: Thu Jun 18 21:35:05 2009
New Revision: 786296
URL: http://svn.apache.org/viewvc?rev=786296&view=rev
Log:
SHINDIG-1091 | Improve open proxy transparent and BGR image handling
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java?rev=786296&r1=786295&r2=786296&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
Thu Jun 18 21:35:05 2009
@@ -17,9 +17,11 @@
*/
package org.apache.shindig.gadgets.rewrite.image;
+import static java.awt.RenderingHints.KEY_INTERPOLATION;
+import static java.awt.RenderingHints.VALUE_INTERPOLATION_BICUBIC;
import static java.lang.Math.abs;
-import static java.lang.Math.min;
import static java.lang.Math.max;
+import static java.lang.Math.min;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
@@ -36,9 +38,9 @@
import org.apache.shindig.gadgets.rewrite.image.BaseOptimizer.ImageIOOutputter;
import org.apache.shindig.gadgets.rewrite.image.BaseOptimizer.ImageOutputter;
+import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
-import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Set;
@@ -269,32 +271,40 @@
Integer requestedHeight, int extraWidth, int extraHeight) {
int widthStretch = requestedWidth - extraWidth;
int heightStretch = requestedHeight - extraHeight;
+ int imageType = ImageUtils.isOpaque(image)
+ ? BufferedImage.TYPE_3BYTE_BGR
+ : BufferedImage.TYPE_INT_ARGB;
+
image = ImageUtils.getScaledInstance(image, widthStretch, heightStretch,
- RenderingHints.VALUE_INTERPOLATION_BICUBIC, true /* higherQuality */);
+ VALUE_INTERPOLATION_BICUBIC, true /* higherQuality */, imageType);
if (image.getWidth() != requestedWidth || image.getHeight() !=
requestedHeight) {
- image = stretchImage(image, requestedWidth, requestedHeight);
+ image = stretchImage(image, requestedWidth, requestedHeight, imageType);
}
return image;
}
private BufferedImage stretchImage(BufferedImage image, Integer
requestedWidth,
- Integer requestedHeight) {
- BufferedImage scaledImage = new BufferedImage(requestedWidth,
requestedHeight,
- BufferedImage.TYPE_INT_ARGB_PRE);
+ Integer requestedHeight, int imageType) {
+ BufferedImage scaledImage = new BufferedImage(requestedWidth,
requestedHeight, imageType);
Graphics2D g2d = scaledImage.createGraphics();
- g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
- RenderingHints.VALUE_INTERPOLATION_BICUBIC);
-
- g2d.setColor(COLOR_TRANSPARENT);
- g2d.fillRect(0, 0, requestedWidth, requestedHeight);
+ g2d.setRenderingHint(KEY_INTERPOLATION, VALUE_INTERPOLATION_BICUBIC);
+ fillWithTransparent(g2d, requestedWidth, requestedHeight);
g2d.drawImage(image, 0, 0, requestedWidth, requestedHeight, null);
image = scaledImage;
return image;
}
+ private void fillWithTransparent(Graphics2D g2d, Integer requestedWidth,
+ Integer requestedHeight) {
+ g2d.setComposite(AlphaComposite.Clear);
+ g2d.setColor(COLOR_TRANSPARENT);
+ g2d.fillRect(0, 0, requestedWidth, requestedHeight);
+ g2d.setComposite(AlphaComposite.SrcOver);
+ }
+
private HttpResponse getOptimizer(HttpResponse response, ImageFormat
imageFormat,
BufferedImage image) throws IOException {
@@ -353,8 +363,8 @@
return pathExtMatches;
}
- private boolean isResizeRequired(Integer resize_w, Integer resize_h,
ImageInfo imageInfo) {
- return resize_w != imageInfo.getWidth() || resize_h !=
imageInfo.getWidth();
+ private boolean isResizeRequired(int resize_w, int resize_h, ImageInfo
imageInfo) {
+ return resize_w != imageInfo.getWidth() || resize_h !=
imageInfo.getHeight();
}
/**
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java?rev=786296&r1=786295&r2=786296&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java
Thu Jun 18 21:35:05 2009
@@ -152,8 +152,8 @@
int targetWidth,
int targetHeight,
Object hint,
- boolean higherQuality) {
- int type = BufferedImage.TYPE_INT_RGB;
+ boolean higherQuality,
+ int imageType) {
BufferedImage ret = img;
int w, h;
if (higherQuality) {
@@ -184,7 +184,7 @@
}
}
- BufferedImage tmp = new BufferedImage(w, h, type);
+ BufferedImage tmp = new BufferedImage(w, h, imageType);
Graphics2D g2 = tmp.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g2.drawImage(ret, 0, 0, w, h, null);