package com.watermark;
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/*
* 实现添加单个图片水印
*/
public class ImageMarkService implements MarkService{
@Override
public String watermark(File image, String imageFileName,
String uploadPath, String realUploadPath) {
String logoFileName = "logo_"+imageFileName;
OutputStream os = null;
String logoPath = realUploadPath+"/"+LOGO; //logo水印文件的具体路径
try {
//1 创建图片缓存对象
Image image2 = ImageIO.read(image);
int width = image2.getWidth(null);
int height = image2.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//2 创建Java绘图工具对象
Graphics2D g = bufferedImage.createGraphics();
//3 使用绘图工具对象将原图绘制到缓存图片对象
g.drawImage(image2, 0, 0, width, height, null);
//4 使用绘图工具对象将水印(文字/图片)绘制到缓存图片
// g.setFont(new Font(FONT_NAME,FONT_STYLE,FONT_SIZE));
// g.setColor(FONT_COLOR);
//创建logo文件,使用ImageIO流来读取文件
File logo = new File(logoPath);
Image imageLogo = ImageIO.read(logo);
//分析图片文件的高度和宽度
int width1 = imageLogo.getWidth(null);
int height1= imageLogo.getHeight(null); //图片水印高度
//计算原图与水印图片的宽度、高度之差
int widthDiff = width - width1; //宽度之差
int heightDiff= height - height1; //高度之差
int x = X; //横坐标
int y = Y; //纵坐标
//保证图片水印在右下方显示
if(x > widthDiff){
x = widthDiff;
}
if(y > heightDiff){
y = heightDiff;
}
//水印透明度的设置
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,ALPHA));//透明度的设置
//绘制图片水印
g.drawImage(imageLogo, x, y,null);
//释放工具
g.dispose();
//创建文件输出流,指向最终的目标文件
os = new FileOutputStream(realUploadPath+"/"+logoFileName); //最终目标文件
//5 创建图像文件编码工具类
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
//6 使用图像编码工具类,输出缓存图像到目标文件
en.encode(bufferedImage);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(os!=null){
try {
os.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
return uploadPath+"/"+logoFileName;
}
}
最近下载更多
jp6863655 LV13
2020年8月24日
dasdada LV1
2020年6月24日
嘻嘻哈12333 LV5
2020年4月27日
CLATZJ LV19
2020年3月6日
pllpll LV9
2019年11月23日
wucailang LV11
2019年11月1日
zhw731727335 LV1
2019年7月8日
ziyu199803 LV9
2019年4月28日
fenghuang8 LV22
2019年3月31日
gj_hachi LV1
2019年1月14日

最近浏览