这篇文章主要介绍了Java实现给图片添加图片水印,文字水印及马赛克的方法,涉及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;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(); //输出图片 File sf = new File(output, imageName+"."+imageType); ImageIO.write(bi, imageType, sf); // 保存图片 result = "图片完成添加Word水印"; } catch (Exception e) { e.printstacktrace(); } return result; } /** * 给图片添加单个文字水印、可设置水印文字旋转角度 * @param source 需要添加水印的图片路径(如:F:/images/6.jpg) * @param outPut 添加水印后图片输出路径(如:F:/images/) * @param imageName 图片名称(如:11111) * @param imageType 图片类型(如:jpg) * @param color 水印文字的颜色 * @param word 水印文字 * @param degree 水印文字旋转角度,为null表示不旋转 */ public static String markImageBySingleText(String source,String output,String imageName,String imageType,Color color,String word,Integer degree) { String result = "添加文字水印出错"; try { //读取原图片信息 File file = new File(source); if (!file.isFile()) { return file + " 不是一个图片文件!"; } 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); Graphics2D g = bi.createGraphics(); g.drawImage(img, 0, 0, width, height, null); //设置水印字体样式 Font font = new Font("宋体", 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); int x = width/3; int y = height/2; //水印位置 g.drawString(word, x, y); g.dispose(); //输出图片 File sf = new File(output, imageName+"."+imageType); ImageIO.write(bi, imageType, sf); // 保存图片 result = "图片完成添加Word水印"; } catch (Exception e) { e.printstacktrace(); } return result; } /** * 给图片加马赛克 * @param source 原图片路径(如:F:/images/6.jpg) * @param output 打马赛克后,图片保存的路径(如:F:/images/) * @param imageName 图片名称(如:11111) * @param imageType 图片类型(如:jpg) * @param size 马赛克尺寸,即每个矩形的宽高 * @return */ public static String markImageByMosaic(String source,String output,String imageName,String imageType,int size){ String result = "图片打马赛克出错"; try{ File file = new File(source); if (!file.isFile()) { return file + " 不是一个图片文件!"; } BufferedImage img = ImageIO.read(file); // 读取该图片 int width = img.getWidth(null); //原图片宽 int height = img.getHeight(null); //原图片高 BufferedImage bi = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); //马赛克格尺寸太大或太小 if (width
更多java相关内容感兴趣的读者可查看本站专题:《Java图片操作技巧汇总》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》及《Java数据结构与算法教程》。
希望本文所述对大家java程序设计有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。