Java实现给图片添加图片水印,文字水印及马赛克的方法示例
本文实例讲述了Java实现给图片添加图片水印,文字水印及马赛克的方法。分享给大家供大家参考,具体如下:
可以在eclipse中新建个Utils类,把以下代码复制进去直接使用,以下方法实现单个或多个水印的添加
packagecom.rzxt.fyx.common.util;
importjava.awt.AlphaComposite;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.RenderingHints;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjavax.imageio.ImageIO;
importjavax.swing.ImageIcon;
/**
*给图片添加水印
*@authortgy
*
*/
publicclassMarkImageUtils{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Stringoutput="F:/images/";
Stringsource="F:/images/6.jpg";//源图片路径
Stringicon="F:/images/icon2.png";//覆盖图片路径
StringimageName="mark_image";//图片名称
StringimageType="jpg";//图片类型jpg,jpeg,png,gif
Stringtext="加水印了";
intsize=4;//马赛克大小
Integerdegree=null;//水印旋转角度-45,null表示不旋转
Stringresult=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);
}
/**
*给图片不同位置添加多个图片水印、可设置水印图片旋转角度
*@paramicon水印图片路径(如:F:/images/icon.png)
*@paramsource没有加水印的图片路径(如:F:/images/6.jpg)
*@paramoutput加水印后的图片路径(如:F:/images/)
*@paramimageName图片名称(如:11111)
*@paramimageType图片类型(如:jpg)
*@paramdegree水印图片旋转角度,为null表示不旋转
*/
publicstaticStringmarkImageByMoreIcon(Stringicon,Stringsource,Stringoutput,StringimageName,StringimageType,Integerdegree){
Stringresult="添加图片水印出错";
try{
Filefile=newFile(source);
Fileficon=newFile(icon);
if(!file.isFile()){
returnsource+"不是一个图片文件!";
}
//将icon加载到内存中
Imageic=ImageIO.read(ficon);
//icon高度
inticheight=ic.getHeight(null);
//将源图片读到内存中
Imageimg=ImageIO.read(file);
//图片宽
intwidth=img.getWidth(null);
//图片高
intheight=img.getHeight(null);
BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//创建一个指定BufferedImage的Graphics2D对象
Graphics2Dg=bi.createGraphics();
//x,y轴默认是从0坐标开始
intx=0;
inty=0;
//默认两张水印图片的间隔高度是水印图片的1/3
inttemp=icheight/3;
intspace=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(inti=0;iheight){
break;
}
if(null!=degree){
//设置水印旋转
g.rotate(Math.toRadians(degree),(double)bi.getWidth()/2,(double)bi.getHeight()/2);
}
g.setFont(font);
//水印位置
g.drawString(word,x,y);
y+=(2*size);
}
g.dispose();
//输出图片
Filesf=newFile(output,imageName+"."+imageType);
ImageIO.write(bi,imageType,sf);//保存图片
result="图片完成添加Word水印";
}catch(Exceptione){
e.printStackTrace();
}
returnresult;
}
/**
*给图片添加单个文字水印、可设置水印文字旋转角度
*@paramsource需要添加水印的图片路径(如:F:/images/6.jpg)
*@paramoutPut添加水印后图片输出路径(如:F:/images/)
*@paramimageName图片名称(如:11111)
*@paramimageType图片类型(如:jpg)
*@paramcolor水印文字的颜色
*@paramword水印文字
*@paramdegree水印文字旋转角度,为null表示不旋转
*/
publicstaticStringmarkImageBySingleText(Stringsource,Stringoutput,StringimageName,StringimageType,Colorcolor,Stringword,Integerdegree){
Stringresult="添加文字水印出错";
try{
//读取原图片信息
Filefile=newFile(source);
if(!file.isFile()){
returnfile+"不是一个图片文件!";
}
Imageimg=ImageIO.read(file);
intwidth=img.getWidth(null);
intheight=img.getHeight(null);
//加水印
BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2Dg=bi.createGraphics();
g.drawImage(img,0,0,width,height,null);
//设置水印字体样式
Fontfont=newFont("宋体",Font.PLAIN,50);
//根据图片的背景设置水印颜色
g.setColor(color);
if(null!=degree){
//设置水印旋转
g.rotate(Math.toRadians(degree),(double)bi.getWidth()/2,(double)bi.getHeight()/2);
}
g.setFont(font);
intx=width/3;
inty=height/2;
//水印位置
g.drawString(word,x,y);
g.dispose();
//输出图片
Filesf=newFile(output,imageName+"."+imageType);
ImageIO.write(bi,imageType,sf);//保存图片
result="图片完成添加Word水印";
}catch(Exceptione){
e.printStackTrace();
}
returnresult;
}
/**
*给图片加马赛克
*@paramsource原图片路径(如:F:/images/6.jpg)
*@paramoutput打马赛克后,图片保存的路径(如:F:/images/)
*@paramimageName图片名称(如:11111)
*@paramimageType图片类型(如:jpg)
*@paramsize马赛克尺寸,即每个矩形的宽高
*@return
*/
publicstaticStringmarkImageByMosaic(Stringsource,Stringoutput,StringimageName,StringimageType,intsize){
Stringresult="图片打马赛克出错";
try{
Filefile=newFile(source);
if(!file.isFile()){
returnfile+"不是一个图片文件!";
}
BufferedImageimg=ImageIO.read(file);//读取该图片
intwidth=img.getWidth(null);//原图片宽
intheight=img.getHeight(null);//原图片高
BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//马赛克格尺寸太大或太小
if(width
更多java相关内容感兴趣的读者可查看本站专题:《Java图片操作技巧汇总》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》及《Java数据结构与算法教程》。
希望本文所述对大家java程序设计有所帮助。