一 点睛
给图片加水印是一种常见的防伪技术,在此提供一个图片水印工具类。
二 代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201package com.imooc.demo.common.util; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; /** * @className: ImagemarkUtils * @description: 图片水印工具类 * @date: 2020/8/20 * @author: cakin */ public class ImagemarkUtils { // 水印透明度 private static float alpha = 0.5f; // 水印横向位置 private static int positionWidth = 150; // 水印纵向位置 private static int positionHeight = 300; // 水印文字字体 private static Font font = new Font("宋体", Font.BOLD, 72); // 水印文字颜色 private static Color color = Color.red; /** * @param alpha 水印透明度 * @param positionWidth 水印横向位置 * @param positionHeight 水印纵向位置 * @param font 水印文字字体 * @param color 水印文字颜色 */ public static void setImageMarkOptions(float alpha, int positionWidth, int positionHeight, Font font, Color color) { if (alpha != 0.0f) ImagemarkUtils.alpha = alpha; if (positionWidth != 0) ImagemarkUtils.positionWidth = positionWidth; if (positionHeight != 0) ImagemarkUtils.positionHeight = positionHeight; if (font != null) ImagemarkUtils.font = font; if (color != null) ImagemarkUtils.color = color; } /** * 给图片添加水印图片 * * @param iconPath 水印图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 */ public static void markImageByIcon(String iconPath, String srcImgPath, String targerPath) { markImageByIcon(iconPath, srcImgPath, targerPath, null); } /** * 给图片添加水印图片、可设置水印图片旋转角度 * * @param iconPath 水印图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 * @param degree 水印图片旋转角度 */ public static void markImageByIcon(String iconPath, String srcImgPath, String targerPath, Integer degree) { OutputStream os = null; try { Image srcImg = ImageIO.read(new File(srcImgPath)); BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); // 1、得到画笔对象 Graphics2D g = buffImg.createGraphics(); // 2、设置对线段的锯齿状边缘处理 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null); // 3、设置水印旋转 if (null != degree) { g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2); } // 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度 ImageIcon imgIcon = new ImageIcon(iconPath); // 5、得到Image对象。 Image img = imgIcon.getImage(); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 6、水印图片的位置 positionWidth = srcImg.getWidth(null) - imgIcon.getIconWidth() > 0 ? srcImg.getWidth(null) - imgIcon.getIconWidth() : 0; positionHeight = srcImg.getHeight(null) - imgIcon.getIconHeight() > 0 ? srcImg.getHeight(null) - imgIcon.getIconHeight() : 0; g.drawImage(img, positionWidth, positionHeight, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); // 7、释放资源 g.dispose(); // 8、生成图片 os = new FileOutputStream(targerPath); ImageIO.write(buffImg, "JPG", os); System.out.println("图片完成添加水印图片"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 给图片添加水印文字 * * @param logoText 水印文字 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 */ public static void markImageByText(String logoText, String srcImgPath, String targerPath) { markImageByText(logoText, srcImgPath, targerPath, null); } /** * 给图片添加水印文字、可设置水印文字的旋转角度 * * @param logoText 水印文字 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 * @param degree 水印图片旋转角度 */ public static void markImageByText(String logoText, String srcImgPath, String targerPath, Integer degree) { InputStream is = null; OutputStream os = null; try { // 1、源图片 Image srcImg = ImageIO.read(new File(srcImgPath)); BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); // 2、得到画笔对象 Graphics2D g = buffImg.createGraphics(); // 3、设置对线段的锯齿状边缘处理 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null); // 4、设置水印旋转 if (null != degree) { g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2); } // 5、设置水印文字颜色 g.setColor(color); // 6、设置水印文字Font g.setFont(font); // 7、设置水印文字透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) g.drawString(logoText, positionWidth, positionHeight); // 9、释放资源 g.dispose(); // 10、生成图片 os = new FileOutputStream(targerPath); ImageIO.write(buffImg, "JPG", os); System.out.println("图片完成添加水印文字"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != is) is.close(); } catch (Exception e) { e.printStackTrace(); } try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 功能描述:给图片 c1.png 添加水印 c30.png * * @param args 参数 * @author cakin * @date 2020/8/20 */ public static void main(String[] args) { String srcImgPath = "G:/photo/c1.png"; String iconPath = "G:/photo/c30.png"; System.out.println("给图片添加水印图片开始..."); ImagemarkUtils.setImageMarkOptions(0.3f, 1, 1, null, null); // 给图片添加水印图片 ImagemarkUtils.markImageByIcon(iconPath, srcImgPath, srcImgPath); // 给图片添加水印图片,水印图片旋转-45 // markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45); System.out.println("给图片添加水印图片结束..."); } }
最后
以上就是甜甜水池最近收集整理的关于Java实现图片水印工具类一 点睛二 代码的全部内容,更多相关Java实现图片水印工具类一 点睛二 代码内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复