package com.hongqiang.shop.common.utils; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.springframework.util.Assert; public final class ImageUtils { private static final Color color = Color.white; public static void zoom(File srcFile, File destFile, int destWidth, int destHeight) { Assert.notNull(srcFile); Assert.notNull(destFile); Assert.state(destWidth > 0); Assert.state(destHeight > 0); Graphics2D graphics2D = null; ImageOutputStream imageOutputStream = null; ImageWriter localImageWriter = null; try { BufferedImage localBufferedImage1 = ImageIO.read(srcFile); int i = localBufferedImage1.getWidth(); int j = localBufferedImage1.getHeight(); int k = destWidth; int m = destHeight; if (j >= i) k = (int) Math.round(destHeight * 1.0D / j * i); else m = (int) Math.round(destWidth * 1.0D / i * j); BufferedImage localBufferedImage2 = new BufferedImage(destWidth, destHeight, 1); graphics2D = localBufferedImage2.createGraphics(); graphics2D.setBackground(color); graphics2D.clearRect(0, 0, destWidth, destHeight); graphics2D.drawImage( localBufferedImage1.getScaledInstance(k, m, 4), destWidth / 2 - k / 2, destHeight / 2 - m / 2, null); imageOutputStream = ImageIO.createImageOutputStream(destFile); localImageWriter = (ImageWriter) ImageIO .getImageWritersByFormatName( FilenameUtils.getExtension(destFile.getName())) .next(); localImageWriter.setOutput(imageOutputStream); ImageWriteParam localImageWriteParam = localImageWriter .getDefaultWriteParam(); localImageWriteParam.setCompressionMode(2); localImageWriteParam.setCompressionQuality(0.88F); localImageWriter.write(null, new IIOImage(localBufferedImage2, null, null), localImageWriteParam); imageOutputStream.flush(); } catch (IOException localIOException) { localIOException.printStackTrace(); if (graphics2D != null) graphics2D.dispose(); if (localImageWriter != null) localImageWriter.dispose(); if (imageOutputStream == null) return; try { imageOutputStream.close(); } catch (IOException localIOException1) { } } finally { if (graphics2D != null) graphics2D.dispose(); if (localImageWriter != null) localImageWriter.dispose(); if (imageOutputStream != null) try { imageOutputStream.close(); } catch (IOException localIOException2) { } } try { imageOutputStream.close(); } catch (IOException localIOException3) { } } public static void addWatermark(File srcFile, File destFile, File watermarkFile, Setting.WatermarkPosition watermarkPosition, int alpha) { Assert.notNull(srcFile); Assert.notNull(destFile); Assert.state(alpha >= 0); Assert.state(alpha <= 100); if ((watermarkFile == null) || (!watermarkFile.exists()) || (watermarkPosition == null) || (watermarkPosition == Setting.WatermarkPosition.no)) { try { FileUtils.copyFile(srcFile, destFile); } catch (IOException localIOException) { localIOException.printStackTrace(); } return; } Graphics2D graphics2D = null; ImageOutputStream imageOutputStream = null; ImageWriter imageWriter = null; try { BufferedImage localBufferedImage1 = ImageIO.read(srcFile); int i = localBufferedImage1.getWidth(); int j = localBufferedImage1.getHeight(); BufferedImage localBufferedImage2 = new BufferedImage(i, j, 1); graphics2D = localBufferedImage2.createGraphics(); graphics2D.setBackground(color); graphics2D.clearRect(0, 0, i, j); graphics2D.drawImage(localBufferedImage1, 0, 0, null); graphics2D.setComposite(AlphaComposite.getInstance(10, alpha / 100.0F)); BufferedImage localBufferedImage3 = ImageIO.read(watermarkFile); int k = localBufferedImage3.getWidth(); int m = localBufferedImage3.getHeight(); int n = i - k; int i1 = j - m; if (watermarkPosition == Setting.WatermarkPosition.topLeft) { n = 0; i1 = 0; } else if (watermarkPosition == Setting.WatermarkPosition.topRight) { n = i - k; i1 = 0; } else if (watermarkPosition == Setting.WatermarkPosition.center) { n = (i - k) / 2; i1 = (j - m) / 2; } else if (watermarkPosition == Setting.WatermarkPosition.bottomLeft) { n = 0; i1 = j - m; } else if (watermarkPosition == Setting.WatermarkPosition.bottomRight) { n = i - k; i1 = j - m; } graphics2D.drawImage(localBufferedImage3, n, i1, k, m, null); imageOutputStream = ImageIO.createImageOutputStream(destFile); imageWriter = (ImageWriter) ImageIO.getImageWritersByFormatName( FilenameUtils.getExtension(destFile.getName())).next(); imageWriter.setOutput(imageOutputStream); ImageWriteParam localImageWriteParam = imageWriter .getDefaultWriteParam(); localImageWriteParam.setCompressionMode(2); localImageWriteParam.setCompressionQuality(0.88F); imageWriter.write(null, new IIOImage(localBufferedImage2, null, null), localImageWriteParam); imageOutputStream.flush(); } catch (IOException localIOException7) { localIOException7.printStackTrace(); if (graphics2D != null) graphics2D.dispose(); if (imageWriter != null) imageWriter.dispose(); if (imageOutputStream == null) return; try { imageOutputStream.close(); } catch (IOException localIOException2) { } } finally { if (graphics2D != null) graphics2D.dispose(); if (imageWriter != null) imageWriter.dispose(); if (imageOutputStream != null) try { imageOutputStream.close(); } catch (IOException localIOException3) { } } try { imageOutputStream.close(); } catch (IOException localIOException4) { } } public static void initialize() { } }