From: <die...@us...> - 2011-12-28 07:41:25
|
Revision: 3732 http://openutils.svn.sourceforge.net/openutils/?rev=3732&view=rev Author: diego_schivo Date: 2011-12-28 07:41:17 +0000 (Wed, 28 Dec 2011) Log Message: ----------- MEDIA-277 skipRendering Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/crop/PzcImageProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/RoundedCornersProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/crop/PzcImageProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/crop/PzcImageProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/crop/PzcImageProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -71,8 +71,18 @@ float oX = oWidth * zoom * factor; float oY = oX * oHeight / oWidth; - BufferedImage filled = ImageUtils.resizeImage(original, (int) oX, (int) oY); - return ImageUtils.cropImage(filled, (int) (panX * factor), (int) (panY * factor), x, y); + BufferedImage filled = ImageUtils.resizeImage( + original, + (int) oX, + (int) oY, + "true".equals(parameters.get("skipRendering"))); + return ImageUtils.cropImage( + filled, + (int) (panX * factor), + (int) (panY * factor), + x, + y, + "true".equals(parameters.get("skipRendering"))); } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -50,9 +50,14 @@ */ public BufferedImage fitIn(BufferedImage original, int x, int y) { - return resizeInOut(original, x, y, false, null); + return fitIn(original, x, y, false); } + public BufferedImage fitIn(BufferedImage original, int x, int y, boolean skipRendering) + { + return resizeInOut(original, x, y, false, null, skipRendering); + } + /** * Resize an image to fit into the rect x, y and fill empty spaces with given background color * @param original original image @@ -63,9 +68,14 @@ */ public BufferedImage fitIn(BufferedImage original, int x, int y, Color background) { - return resizeInOut(original, x, y, true, background); + return fitIn(original, x, y, background, false); } + public BufferedImage fitIn(BufferedImage original, int x, int y, Color background, boolean skipRendering) + { + return resizeInOut(original, x, y, true, background, skipRendering); + } + /** * Resize image to fit in x,y. If fit is true the resulting image is x,y and if there are two empty bands they are * filled with backgroung color. @@ -78,6 +88,11 @@ */ protected BufferedImage resizeInOut(BufferedImage original, int x, int y, boolean fit, Color background) { + return resizeInOut(original, x, y, fit, background, false); + } + + protected BufferedImage resizeInOut(BufferedImage original, int x, int y, boolean fit, Color background, boolean skipRendering) + { if (original == null) { throw new IllegalArgumentException("input image is null"); @@ -104,7 +119,7 @@ int newX = (int) Math.round(oX * ratio); int newY = (int) Math.round(oY * ratio); - return ImageUtils.resizeImage(original, newX, newY, fit ? x : newX, fit ? y : newY, background); + return ImageUtils.resizeImage(original, newX, newY, fit ? x : newX, fit ? y : newY, background, skipRendering); } /** @@ -117,6 +132,11 @@ */ public BufferedImage fill(BufferedImage original, int x, int y, boolean cropCentered) { + return fill(original, x, y, cropCentered, false); + } + + public BufferedImage fill(BufferedImage original, int x, int y, boolean cropCentered, boolean skipRendering) + { int oWidth = original.getWidth(); int oHeight = original.getHeight(); if (x == oWidth && y == oHeight) @@ -133,15 +153,15 @@ if (oDelta >= delta) { int newX = (int) (y * oX / oY); - BufferedImage filled = ImageUtils.resizeImage(original, newX, y); - return cropCentered ? ImageUtils.cropImage(filled, (newX - x) / 2, 0, x, y) : filled; + BufferedImage filled = ImageUtils.resizeImage(original, newX, y, skipRendering); + return cropCentered ? ImageUtils.cropImage(filled, (newX - x) / 2, 0, x, y, skipRendering) : filled; } else // if (oDelta < delta) { int newY = (int) (x * oY / oX); - BufferedImage filled = ImageUtils.resizeImage(original, x, newY); - return cropCentered ? ImageUtils.cropImage(filled, 0, (newY - y) / 2, x, y) : filled; + BufferedImage filled = ImageUtils.resizeImage(original, x, newY, skipRendering); + return cropCentered ? ImageUtils.cropImage(filled, 0, (newY - y) / 2, x, y, skipRendering) : filled; } } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -62,6 +62,6 @@ log.error("Invalid color code: " + hexColor, e); } } - return fitIn(original, x, y, color); + return fitIn(original, x, y, color, "true".equals(parameters.get("skipRendering"))); } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -36,7 +36,7 @@ */ public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) { - return fitIn(original, x, y); + return fitIn(original, x, y, "true".equals(parameters.get("skipRendering"))); } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -37,7 +37,7 @@ */ public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) { - return fill(original, x, y, true); + return fill(original, x, y, true, "true".equals(parameters.get("skipRendering"))); } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -37,7 +37,7 @@ */ public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) { - return fill(original, x, y, false); + return fill(original, x, y, false, "true".equals(parameters.get("skipRendering"))); } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/RoundedCornersProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/RoundedCornersProcessor.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/RoundedCornersProcessor.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -80,7 +80,7 @@ log.error("Invalid color code: " + hexColor, e); } } - return ImageUtils.addRoundedCorners(image, backgroundColor, radius); + return ImageUtils.addRoundedCorners(image, backgroundColor, radius, "true".equals(parameters.get("skipRendering"))); } return image; } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-12-25 08:18:30 UTC (rev 3731) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-12-28 07:41:17 UTC (rev 3732) @@ -172,9 +172,14 @@ */ public static BufferedImage resizeImage(BufferedImage original, int x, int y) { - return resizeImage(original, x, y, x, y, null); + return resizeImage(original, x, y, false); } + public static BufferedImage resizeImage(BufferedImage original, int x, int y, boolean skipRendering) + { + return resizeImage(original, x, y, x, y, null, skipRendering); + } + /** * Resize an image to x,y * @param original original image @@ -188,6 +193,12 @@ public static BufferedImage resizeImage(BufferedImage original, int x, int y, int canvasX, int canvasY, Color background) { + return resizeImage(original, x, y, canvasX, canvasY, background, false); + } + + public static BufferedImage resizeImage(BufferedImage original, int x, int y, int canvasX, int canvasY, + Color background, boolean skipRendering) + { if (x <= 0) { x = 1; @@ -222,54 +233,58 @@ + canvasY + "]"); } - Graphics2D graphics2D = resizedImage.createGraphics(); - graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); - if (canvasX > x || canvasY > y) + if (!skipRendering) { - graphics2D.clearRect(0, 0, canvasX, canvasY); + Graphics2D graphics2D = resizedImage.createGraphics(); - if (background == null && original.getColorModel().getTransparency() == Transparency.OPAQUE) + graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + if (canvasX > x || canvasY > y) { - background = Color.WHITE; - } - // fill bands - if (background != null) - { - graphics2D.setColor(background); + graphics2D.clearRect(0, 0, canvasX, canvasY); - if (canvasX > x) + if (background == null && original.getColorModel().getTransparency() == Transparency.OPAQUE) { - graphics2D.fillRect(0, 0, (canvasX - x) / 2, canvasY); - graphics2D.fillRect(x + (canvasX - x) / 2, 0, canvasX, canvasY); + background = Color.WHITE; } - if (canvasY > y) + // fill bands + if (background != null) { - graphics2D.fillRect(0, 0, canvasX, (canvasY - y) / 2); - graphics2D.fillRect(0, y + (canvasY - y) / 2, canvasX, canvasY); + graphics2D.setColor(background); + + if (canvasX > x) + { + graphics2D.fillRect(0, 0, (canvasX - x) / 2, canvasY); + graphics2D.fillRect(x + (canvasX - x) / 2, 0, canvasX, canvasY); + } + if (canvasY > y) + { + graphics2D.fillRect(0, 0, canvasX, (canvasY - y) / 2); + graphics2D.fillRect(0, y + (canvasY - y) / 2, canvasX, canvasY); + } } } - } - graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); - AffineTransform at = new AffineTransform(); - double delta = ((double) x) / original.getWidth(); - if (x > original.getWidth()) - { - at.scale(delta, delta); - at.translate((canvasX - x) / (2 * delta), (canvasY - y) / (2 * delta)); + AffineTransform at = new AffineTransform(); + double delta = ((double) x) / original.getWidth(); + if (x > original.getWidth()) + { + at.scale(delta, delta); + at.translate((canvasX - x) / (2 * delta), (canvasY - y) / (2 * delta)); + } + else if (x < original.getWidth()) + { + original = getScaledInstance(original, x, y, RenderingHints.VALUE_INTERPOLATION_BILINEAR, true, false); + at.translate((canvasX - x) / 2.0, (canvasY - y) / 2.0); + } + + graphics2D.drawImage(original, at, null); + graphics2D.dispose(); } - else if (x < original.getWidth()) - { - original = getScaledInstance(original, x, y, RenderingHints.VALUE_INTERPOLATION_BILINEAR, true); - at.translate((canvasX - x) / 2.0, (canvasY - y) / 2.0); - } - graphics2D.drawImage(original, at, null); - graphics2D.dispose(); - return resizedImage; } @@ -290,6 +305,12 @@ public static BufferedImage getScaledInstance(BufferedImage img, int targetWidth, int targetHeight, Object hint, boolean higherQuality) { + return getScaledInstance(img, targetWidth, targetHeight, hint, higherQuality, false); + } + + public static BufferedImage getScaledInstance(BufferedImage img, int targetWidth, int targetHeight, Object hint, + boolean higherQuality, boolean skipRendering) + { int type = (img.getTransparency() == Transparency.OPAQUE) ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB; @@ -333,10 +354,13 @@ } BufferedImage tmp = new BufferedImage(w, h, type); - Graphics2D g2 = tmp.createGraphics(); - g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint); - g2.drawImage(ret, 0, 0, w, h, null); - g2.dispose(); + if (!skipRendering) + { + Graphics2D g2 = tmp.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint); + g2.drawImage(ret, 0, 0, w, h, null); + g2.dispose(); + } ret = tmp; } @@ -356,16 +380,24 @@ */ public static BufferedImage cropImage(BufferedImage original, int left, int top, int width, int height) { + return cropImage(original, left, top, width, height, false); + } + + public static BufferedImage cropImage(BufferedImage original, int left, int top, int width, int height, boolean skipRendering) + { BufferedImage resizedImage = new BufferedImage(width, height, getType(original.getColorModel())); - Graphics2D graphics2D = resizedImage.createGraphics(); - graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); - graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_DEFAULT); + if (!skipRendering) + { + Graphics2D graphics2D = resizedImage.createGraphics(); + graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_DEFAULT); - AffineTransform at = new AffineTransform(); - at.translate(-left, -top); - graphics2D.drawImage(original, at, null); - graphics2D.dispose(); + AffineTransform at = new AffineTransform(); + at.translate(-left, -top); + graphics2D.drawImage(original, at, null); + graphics2D.dispose(); + } return resizedImage; } @@ -379,6 +411,11 @@ */ public static BufferedImage addRoundedCorners(BufferedImage original, Color backgroundColor, int radius) { + return addRoundedCorners(original, backgroundColor, radius, false); + } + + public static BufferedImage addRoundedCorners(BufferedImage original, Color backgroundColor, int radius, boolean skipRendering) + { int originalImageType = getType(original.getColorModel()); int roundedCornersImageType = BufferedImage.TYPE_4BYTE_ABGR; @@ -409,37 +446,40 @@ throw new RuntimeException("NegativeArraySizeException caught when adding rounded corners"); } - Graphics2D roundedGraphics2D = roundedImage.createGraphics(); - roundedGraphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - roundedGraphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + if (!skipRendering) + { + Graphics2D roundedGraphics2D = roundedImage.createGraphics(); + roundedGraphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + roundedGraphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); - roundedGraphics2D.setColor(Color.WHITE); - roundedGraphics2D.fillRoundRect(0, 0, original.getWidth(), original.getHeight(), radius, radius); - roundedGraphics2D.setComposite(AlphaComposite.SrcIn); - roundedGraphics2D.drawImage(original, 0, 0, original.getWidth(), original.getHeight(), null); + roundedGraphics2D.setColor(Color.WHITE); + roundedGraphics2D.fillRoundRect(0, 0, original.getWidth(), original.getHeight(), radius, radius); + roundedGraphics2D.setComposite(AlphaComposite.SrcIn); + roundedGraphics2D.drawImage(original, 0, 0, original.getWidth(), original.getHeight(), null); - if (backgroundColor != null) - { + if (backgroundColor != null) + { - BufferedImage destImage; - try - { - destImage = new BufferedImage(original.getWidth(), original.getHeight(), originalImageType); + BufferedImage destImage; + try + { + destImage = new BufferedImage(original.getWidth(), original.getHeight(), originalImageType); + } + catch (NegativeArraySizeException e) + { + throw new RuntimeException("NegativeArraySizeException caught when resizing image]"); + } + // draw new image + Graphics2D destImageGraphics2D = destImage.createGraphics(); + destImageGraphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + destImageGraphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + + destImageGraphics2D.setBackground(backgroundColor); + destImageGraphics2D.clearRect(0, 0, original.getWidth(), original.getHeight()); + // destImageGraphics2D.setComposite(AlphaComposite.DstIn); + destImageGraphics2D.drawImage(roundedImage, 0, 0, original.getWidth(), original.getHeight(), null); + return destImage; } - catch (NegativeArraySizeException e) - { - throw new RuntimeException("NegativeArraySizeException caught when resizing image]"); - } - // draw new image - Graphics2D destImageGraphics2D = destImage.createGraphics(); - destImageGraphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - destImageGraphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); - - destImageGraphics2D.setBackground(backgroundColor); - destImageGraphics2D.clearRect(0, 0, original.getWidth(), original.getHeight()); - // destImageGraphics2D.setComposite(AlphaComposite.DstIn); - destImageGraphics2D.drawImage(roundedImage, 0, 0, original.getWidth(), original.getHeight(), null); - return destImage; } return roundedImage; @@ -878,18 +918,15 @@ BufferedImage original = createBufferedImage(image); Map<String, String> params = parseParameters(resolutionstring); + if (lazy) + { + params.put("skipRendering", "true"); + } BufferedImage img; try { - if (lazy) - { - img = new BufferedImage(1, 1, getType(original.getColorModel())); - } - else - { - img = ImageUtils.getImageForResolution(original, resolutionstring, params); - } + img = ImageUtils.getImageForResolution(original, resolutionstring, params); } catch (IllegalArgumentException e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |