1. 程式人生 > >圖片新增圖片水印和文字水印

圖片新增圖片水印和文字水印

前言:最近需要對圖片新增文字水印和圖片水印,而且要根據原圖片不同的大小,打上不同的大小的水印和文字,保證使用者在視覺上看到的水印的大小是一致的。

話不多說,上程式碼,先上處理圖片的程式碼

/**
     * @author: Aubergine
     * @date: 2018/10/28 11:57
     * @param srcImage 原圖片的地址
     * @param pressImg 水印圖片
     * @param pressText 水印文字
     * @param color 字型的顏色
     * @param font 字型的大小
     * @param alpha 模糊度
     * @return
     */
public BufferedImage pressText(File srcImage, Image pressImg, String pressText, Color color,Font font, float alpha) { final BufferedImage destImage = ImageUtil.read(srcImage); final Graphics2D gf = destImage.createGraphics(); // 抗鋸齒 gf.setRenderingHint(RenderingHints.
KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gf.setColor(color); gf.setFont(font); // 透明度 gf.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 在指定座標繪製水印文字 FontMetrics metrics = gf.getFontMetrics(font); int textLength =
metrics.stringWidth(pressText); int textHeight = metrics.getAscent() - metrics.getLeading() - metrics.getDescent(); gf.drawString(pressText, destImage.getWidth() - textLength, destImage.getHeight() - (textHeight / 2)); gf.dispose(); int width = destImage.getWidth((ImageObserver) null); int height = destImage.getHeight((ImageObserver) null); BufferedImage destImage2 = new BufferedImage(width, height, 1); Graphics2D g = destImage2.createGraphics(); g.drawImage(destImage, 0, 0, width, height, (ImageObserver) null); int pressImgWidth = pressImg.getWidth((ImageObserver) null); int pressImgHeight = pressImg.getHeight((ImageObserver) null); int x = (width - pressImgWidth) - textLength - 5; int y = (height - pressImgHeight); g.setComposite(AlphaComposite.getInstance(10, alpha)); // 給圖片打上圖片水印 g.drawImage(pressImg, x, y, pressImgWidth, pressImgHeight, (ImageObserver) null); g.dispose(); return destImage2; }

呼叫的時候這樣用

// 原圖尺寸 3800*2850
ImageUtil.write(pressText(cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-3800-2850.jpg"),
                ImageUtil.read(new File("C:\\Users\\Administrator\\Desktop\\newlog\\116_116.png")),
                "@版權版權", Color.WHITE,
                new Font("微軟雅黑", Font.BOLD, 86),
                1f), cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-3800-2850-r.jpg"));
// 原圖尺寸是 1500*760
ImageUtil.write(pressText(FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-1500-760.jpg"),
                ImageUtil.read(new File("C:\\Users\\Administrator\\Desktop\\newlog\\58_58.png")),
                "@版權版權", Color.WHITE,
                new Font("微軟雅黑", Font.BOLD, 42),
                1f), cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-1500-760-r.jpg"));

原圖

效果圖

原圖

效果圖

PS:推薦一個比較好的JAVA工具包hutool,裡面有很多的小工具,在開發的過程中使用很方便。