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);

//将源图⽚读到内存中