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程序设计有所帮助。