|
@@ -1,15 +1,81 @@
|
|
|
package cn.com.qmth.stmms.ms.admin.utils;
|
|
|
|
|
|
+import javax.imageio.IIOImage;
|
|
|
import javax.imageio.ImageIO;
|
|
|
+import javax.imageio.ImageWriteParam;
|
|
|
+import javax.imageio.ImageWriter;
|
|
|
+import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
|
|
|
+import javax.imageio.stream.FileImageOutputStream;
|
|
|
import java.awt.*;
|
|
|
+import java.awt.geom.Rectangle2D;
|
|
|
import java.awt.image.BufferedImage;
|
|
|
import java.io.File;
|
|
|
import java.io.FileOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
|
|
|
/**
|
|
|
* Created by yuanpan on 2017/12/13.
|
|
|
*/
|
|
|
public class WaterMarkUtils {
|
|
|
+
|
|
|
+
|
|
|
+ public static void addTextWatermark(String text, String type, String sourcePath, String destinationPath) throws IOException {
|
|
|
+ File source = new File(sourcePath);
|
|
|
+ File destination = new File(destinationPath);
|
|
|
+ BufferedImage image = ImageIO.read(source);
|
|
|
+ int width = image.getWidth();
|
|
|
+ int height = image.getHeight();
|
|
|
+
|
|
|
+ // determine image type and handle correct transparency
|
|
|
+ //int imageType = "png".equalsIgnoreCase(type) ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB;
|
|
|
+ BufferedImage watermarked = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
|
|
|
+
|
|
|
+ // initializes necessary graphic properties
|
|
|
+ Graphics2D w = (Graphics2D) watermarked.getGraphics();
|
|
|
+ w.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
|
|
+ w.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
|
|
+
|
|
|
+ w.drawImage(image.getScaledInstance(image.getWidth(), image.getHeight(), Image.SCALE_SMOOTH), 0, 0, null);
|
|
|
+ AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
|
|
|
+ w.setComposite(alphaChannel);
|
|
|
+ w.setColor(Color.red);
|
|
|
+ w.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 60));
|
|
|
+ FontMetrics fontMetrics = w.getFontMetrics();
|
|
|
+ Rectangle2D rect = fontMetrics.getStringBounds(text, w);
|
|
|
+
|
|
|
+ // calculate center of the image
|
|
|
+// int x = (image.getWidth() - (int) rect.getWidth()) / 2;
|
|
|
+// int y = image.getHeight() / 2;
|
|
|
+
|
|
|
+ int x = 0;
|
|
|
+ int y = image.getHeight() - (int) rect.getHeight() + 50;
|
|
|
+
|
|
|
+ // add text overlay to the image
|
|
|
+ w.drawString(text, x, y);
|
|
|
+ //ImageIO.write(watermarked, type, destination);
|
|
|
+ //w.dispose();
|
|
|
+
|
|
|
+
|
|
|
+ JPEGImageWriteParam jepgParams = new JPEGImageWriteParam(null);
|
|
|
+ jepgParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
|
|
+ jepgParams.setCompressionQuality(1f);
|
|
|
+ final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
|
|
|
+ writer.setOutput(new FileImageOutputStream(destination));
|
|
|
+ writer.write(null, new IIOImage(watermarked, null, null), jepgParams);
|
|
|
+ writer.dispose();
|
|
|
+
|
|
|
+
|
|
|
+ w.dispose();
|
|
|
+
|
|
|
+
|
|
|
+// FileOutputStream fos = new FileOutputStream(destination);
|
|
|
+// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
|
|
|
+// encoder.encode(watermarked);
|
|
|
+// fos.flush();
|
|
|
+// fos.close();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* @param srcImgPath 源图片路径
|
|
|
* @param tarImgPath 保存的图片路径
|
|
@@ -33,8 +99,11 @@ public class WaterMarkUtils {
|
|
|
g.setFont(font); //设置字体
|
|
|
|
|
|
//设置水印的坐标
|
|
|
- int x = srcImgWidth - getWatermarkWidth(waterMarkContent, g);
|
|
|
- int y = getWatermarkHeight(g);
|
|
|
+// int x = srcImgWidth - getWatermarkWidth(waterMarkContent, g);
|
|
|
+// int y = getWatermarkHeight(g);
|
|
|
+ int x = 0;
|
|
|
+ int y = srcImgHeight - getWatermarkHeight(g) + 50;
|
|
|
+// int y = srcImgHeight;
|
|
|
g.drawString(waterMarkContent, x, y); //画出水印
|
|
|
g.dispose();
|
|
|
// 输出图片
|