Java实现给图片添加图片水印,文字水印及马赛克的方法示例
- 格式:pdf
- 大小:98.21 KB
- 文档页数:6
Java实现给图⽚添加图⽚⽔印,⽂字⽔印及马赛克的⽅法
⽰例
本⽂实例讲述了Java实现给图⽚添加图⽚⽔印,⽂字⽔印及马赛克的⽅法。分享给⼤家供⼤家参考,具体如下:
可以在eclipse中新建个Utils类,把以下代码复制进去直接使⽤,以下⽅法实现单个或多个⽔印的添加
package com.rzxt.fyx.common.util;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/**
* 给图⽚添加⽔印
* @author tgy
*
*/
public class MarkImageUtils {
/**
* @param args
*/
public static void main(String[] args) {
String output = "F:/images/";
String source = "F:/images/6.jpg"; //源图⽚路径
String icon = "F:/images/icon2.png"; //覆盖图⽚路径
String imageName = "mark_image"; //图⽚名称
String imageType = "jpg"; //图⽚类型jpg,jpeg,png,gif
String text = "加⽔印了";
int size = 4; //马赛克⼤⼩
Integer degree = null; //⽔印旋转⾓度-45,null表⽰不旋转
String result = null;
//给图⽚添加图⽚⽔印
result = MarkImageUtils.markImageByMoreIcon(icon,source,output,imageName,imageType,degree);
// result = MarkImageUtils.markImageBySingleIcon(icon, source, output, imageName, imageType, degree);
// //给图⽚添加⽂字⽔印
// result = MarkImageUtils.markImageByMoreText(source,output,imageName,imageType,Color.red,text,degree);
// result = MarkImageUtils.markImageBySingleText(source,output,imageName,imageType,Color.red,text,degree);
// //给图⽚打马赛克
// result = MarkImageUtils.markImageByMosaic(source,output,imageName,imageType,size);
System.out.println(result);
}
/**
* 给图⽚不同位置添加多个图⽚⽔印、可设置⽔印图⽚旋转⾓度
* @param icon ⽔印图⽚路径(如:F:/images/icon.png)
* @param source 没有加⽔印的图⽚路径(如:F:/images/6.jpg)
* @param output 加⽔印后的图⽚路径(如:F:/images/)
* @param imageName 图⽚名称(如:11111)
* @param imageType 图⽚类型(如:jpg)
* @param degree ⽔印图⽚旋转⾓度,为null表⽰不旋转
*/
public static String markImageByMoreIcon(String icon,String source,String output,String imageName,String imageType,Integer degree) {
String result = "添加图⽚⽔印出错";
try {
File file = new File(source);
File ficon = new File(icon);
if (!file.isFile()) {
return source + " 不是⼀个图⽚⽂件!";
}
//将icon加载到内存中
Image ic = ImageIO.read(ficon);
//icon⾼度
int icheight = ic.getHeight(null);
//将源图⽚读到内存中
Image img = ImageIO.read(file);
//图⽚宽
int width = img.getWidth(null);
//图⽚⾼ int height = img.getHeight(null);
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//创建⼀个指定 BufferedImage 的 Graphics2D 对象
Graphics2D g = bi.createGraphics();
//x,y轴默认是从0坐标开始
int x = 0;
int y = 0;
//默认两张⽔印图⽚的间隔⾼度是⽔印图⽚的1/3
int temp = icheight/3;
int space = 1;
if(height>=icheight){
space = height/icheight;
if(space>=2){
temp = y = icheight/2;
if(space==1||space==0){
x = 0;
y = 0;
}
}
}else{
x = 0;
y = 0;
}
//设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//呈现⼀个图像,在绘制前进⾏从图像空间到⽤户空间的转换
g.drawImage(img.getScaledInstance(width,height,Image.SCALE_SMOOTH),0,0,null);
for(int i=0;i
if (null != degree) {
//设置⽔印旋转
g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);
}
//⽔印图象的路径 ⽔印⼀般为gif或者png的,这样可设置透明度
ImageIcon imgIcon = new ImageIcon(icon);
//得到Image对象。
Image con = imgIcon.getImage();
//透明度,最⼩值为0,最⼤值为1
float clarity = 0.6f;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,clarity));
//表⽰⽔印图⽚的坐标位置(x,y)
//g.drawImage(con, 300, 220, null);
g.drawImage(con, x, y, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
y+=(icheight+temp);
}
g.dispose();
File sf = new File(output, imageName+"."+imageType);
ImageIO.write(bi, imageType, sf); // 保存图⽚
result = "图⽚完成添加Icon⽔印";
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 给图⽚添加单个图⽚⽔印、可设置⽔印图⽚旋转⾓度
* @param icon ⽔印图⽚路径(如:F:/images/icon.png)
* @param source 没有加⽔印的图⽚路径(如:F:/images/6.jpg)
* @param output 加⽔印后的图⽚路径(如:F:/images/)
* @param imageName 图⽚名称(如:11111)
* @param imageType 图⽚类型(如:jpg)
* @param degree ⽔印图⽚旋转⾓度,为null表⽰不旋转
*/
public static String markImageBySingleIcon(String icon,String source,String output,String imageName,String imageType,Integer degree) {
String result = "添加图⽚⽔印出错";
try {
File file = new File(source);
File ficon = new File(icon);
if (!file.isFile()) {
return source + " 不是⼀个图⽚⽂件!";
}
//将icon加载到内存中
Image ic = ImageIO.read(ficon);
//icon⾼度
int icheight = ic.getHeight(null);
//将源图⽚读到内存中