首页 > 编程语言 > 详细

Java图片加水印

时间:2021-06-11 14:41:16      阅读:34      评论:0      收藏:0      [点我收藏+]

采用Java自带的Image IO

废话不多说,上菜

1.  文字水印

 1 import sun.font.FontDesignMetrics;
 2 
 3 import javax.imageio.ImageIO;
 4 import java.awt.*;
 5 import java.awt.image.BufferedImage;
 6 import java.io.File;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 
10 /**
11  * @Author ChengJianSheng
12  * @Date 2021/6/10
13  */
14 public class WatermarkUtil {
15 
16     public static void main(String[] args) throws IOException {
17         addText("F:/1.jpeg", "我的梦想是成为火影");
18     }
19 
20     /**
21      * 加文字水印
22      * @param srcPath   原文件路径
23      * @param content   文字内容
24      * @throws IOException
25      */
26     public static void addText(String srcPath, String content) throws IOException {
27         //  读取原图片信息
28         BufferedImage srcImage = ImageIO.read(new File(srcPath));
29         int width = srcImage.getWidth();
30         int height = srcImage.getHeight();
31 
32         //  创建画笔,设置绘图区域
33         BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
34         Graphics2D g = bufferedImage.createGraphics();
35         g.drawImage(srcImage, 0, 0, width, height, null);
36 //        g.drawImage(srcImage.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
37 
38         g.setFont(new Font("宋体", Font.PLAIN, 32));
39         g.setColor(Color.RED);
40 
41         //  计算文字长度
42         int len = g.getFontMetrics(g.getFont()).charsWidth(content.toCharArray(), 0, content.length());
43         FontDesignMetrics metrics = FontDesignMetrics.getMetrics(g.getFont());
44         int len2 = metrics.stringWidth(content);
45         System.out.println(len);
46         System.out.println(len2);
47 
48         //  计算文字坐标
49         int x = width - len - 10;
50         int y = height - 20;
51 //        int x = width - 2 * len;
52 //        int y = height - 1 * len;
53 
54         g.drawString(content, x, y);
55 
56         g.dispose();
57 
58         //  输出文件
59         FileOutputStream fos = new FileOutputStream("F:/2.png");
60         ImageIO.write(bufferedImage, "png", fos);
61         fos.flush();
62         fos.close();
63     }
64 
65 }

技术分享图片 

可以设置文字透明度

 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.8f)); 

2.  旋转文字

 1 import sun.font.FontDesignMetrics;
 2 
 3 import javax.imageio.ImageIO;
 4 import java.awt.*;
 5 import java.awt.geom.AffineTransform;
 6 import java.awt.image.BufferedImage;
 7 import java.io.File;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 
11 /**
12  * @Author ChengJianSheng
13  * @Date 2021/6/10
14  */
15 public class WatermarkUtil {
16 
17     // 水印透明度
18     private static final float alpha = 0.5f;
19     // 水印文字字体
20     private static final Font font = new Font("宋体", Font.BOLD, 30);
21     // 水印文字颜色
22     private static final Color color = Color.RED;
23 
24 
25     public static void main(String[] args) throws IOException {
26         addText("F:/1.jpeg", "图片由木叶村提供,仅供忍者联军使用!");
27     }
28 
29     /**
30      * 加文字水印
31      * @param srcPath   原文件路径
32      * @param content   文字内容
33      * @throws IOException
34      */
35     public static void addText(String srcPath, String content) throws IOException {
36         //  读取原图片信息
37         BufferedImage srcImage = ImageIO.read(new File(srcPath));
38         int width = srcImage.getWidth();
39         int height = srcImage.getHeight();
40 
41         //  创建画笔,设置绘图区域
42         BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
43         Graphics2D g = bufferedImage.createGraphics();
44         g.drawImage(srcImage, 0, 0, width, height, null);
45 //        g.drawImage(srcImage.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
46 
47         //  旋转文字
48         AffineTransform affineTransform = g.getTransform();
49         affineTransform.rotate(Math.toRadians(-30), 0, 0);
50         Font rotatedFont = font.deriveFont(affineTransform);
51 
52         g.setFont(rotatedFont); // 字体
53         g.setColor(color);      // 颜色
54         g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 透明度
55 
56         //  计算文字长度
57         int len = g.getFontMetrics(g.getFont()).charsWidth(content.toCharArray(), 0, content.length());
58         FontDesignMetrics metrics = FontDesignMetrics.getMetrics(g.getFont());
59         int len2 = metrics.stringWidth(content);
60         System.out.println(len);
61         System.out.println(len2);
62 
63         //  计算水印文字坐标
64         int x = width/5;
65         int y = height/3*2;
66 
67         g.drawString(content, x, y);
68 
69         g.dispose();
70 
71         //  输出文件
72         FileOutputStream fos = new FileOutputStream("F:/2.png");
73         ImageIO.write(bufferedImage, "png", fos);
74         fos.flush();
75         fos.close();
76     }
77 
78 }

技术分享图片 

画矩形框

 1 import sun.font.FontDesignMetrics;
 2 
 3 import javax.imageio.ImageIO;
 4 import java.awt.*;
 5 import java.awt.image.BufferedImage;
 6 import java.io.File;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 
10 /**
11  * @Author ChengJianSheng
12  * @Date 2021/6/10
13  */
14 public class WatermarkUtil {
15 
16     // 水印透明度
17     private static final float alpha = 0.5f;
18     // 水印文字字体
19     private static final Font font = new Font("宋体", Font.BOLD, 30);
20     // 水印文字颜色
21     private static final Color color = Color.RED;
22 
23 
24     public static void main(String[] args) throws IOException {
25         addText("F:/1.jpeg", "图片由木叶村提供,仅供忍者联军使用!");
26     }
27 
28     /**
29      * 加文字水印
30      * @param srcPath   原文件路径
31      * @param content   文字内容
32      * @throws IOException
33      */
34     public static void addText(String srcPath, String content) throws IOException {
35         //  读取原图片信息
36         BufferedImage srcImage = ImageIO.read(new File(srcPath));
37         int width = srcImage.getWidth();
38         int height = srcImage.getHeight();
39 
40         //  创建画笔,设置绘图区域
41         BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
42         Graphics2D g = bufferedImage.createGraphics();
43         g.drawImage(srcImage, 0, 0, width, height, null);
44 
45         g.setFont(font); // 字体
46         g.setColor(color);  // 颜色
47         g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 透明度
48 
49         //  计算文字宽高度
50         FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
51         int textWidth = metrics.stringWidth(content);   //  文字宽度
52         int textHeight = metrics.getHeight();   //  文字高度
53 
54         //  计算文字坐标
55         int x = (width - textWidth) / 2;
56         int y = (height + textHeight) / 2;
57         //  写文字
58         g.drawString(content, x, y);
59 
60         //  画矩形
61         int padding = 10; // 内边距
62         g.drawRect(x - padding/2, y - textHeight, textWidth + padding, textHeight + padding);
63 
64         g.dispose();
65 
66         //  输出文件
67         FileOutputStream fos = new FileOutputStream("F:/2.png");
68         ImageIO.write(bufferedImage, "png", fos);
69         fos.flush();
70         fos.close();
71     }
72 
73 }

技术分享图片

3.  旋转坐标轴

 1 import sun.font.FontDesignMetrics;
 2 
 3 import javax.imageio.ImageIO;
 4 import java.awt.*;
 5 import java.awt.image.BufferedImage;
 6 import java.io.File;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 
10 /**
11  * @Author ChengJianSheng
12  * @Date 2021/6/10
13  */
14 public class WatermarkUtil {
15 
16     // 水印透明度
17     private static final float alpha = 0.5f;
18     // 水印文字字体
19     private static final Font font = new Font("宋体", Font.BOLD, 30);
20     // 水印文字颜色
21     private static final Color color = Color.RED;
22 
23 
24     public static void main(String[] args) throws IOException {
25         addText("F:/1.jpeg", "图片由木叶村提供,仅供忍者联军使用!");
26     }
27 
28     /**
29      * 加文字水印
30      * @param srcPath   原文件路径
31      * @param content   文字内容
32      * @throws IOException
33      */
34     public static void addText(String srcPath, String content) throws IOException {
35         //  读取原图片信息
36         BufferedImage srcImage = ImageIO.read(new File(srcPath));
37         int width = srcImage.getWidth();
38         int height = srcImage.getHeight();
39 
40         //  创建画笔,设置绘图区域
41         BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
42         Graphics2D g = bufferedImage.createGraphics();
43         g.drawImage(srcImage, 0, 0, width, height, null);
44 
45         g.setFont(font); // 字体
46         g.setColor(color);  // 颜色
47         g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 透明度
48 
49         //  计算文字宽高度
50         FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
51         int textWidth = metrics.stringWidth(content);   //  文字宽度
52         int textHeight = metrics.getHeight();   //  文字高度
53 
54         //  旋转坐标轴
55         g.translate(-width/5, height/4);
56         g.rotate(-30*Math.PI/180);
57 
58         //  计算文字坐标
59         int x = (width - textWidth) / 2;
60         int y = (height + textHeight) / 2;
61         //  写文字
62         g.drawString(content, x, y);
63 
64         //  画矩形
65         int padding = 10; // 内边距
66         g.drawRect(x - padding/2, y - textHeight, textWidth + padding, textHeight + padding);
67 
68         g.dispose();
69 
70         //  输出文件
71         FileOutputStream fos = new FileOutputStream("F:/2.png");
72         ImageIO.write(bufferedImage, "png", fos);
73         fos.flush();
74         fos.close();
75     }
76 
77 }

技术分享图片 

 

Java图片加水印

原文:https://www.cnblogs.com/cjsblog/p/14874647.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!