需求:制作商品的促销水印
1、图片处理工具类ImageUtils
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageUtils {
/**
* @param file 源文件(图片)
* @param waterFile 水印文件(图片)
* @param x 距离右下角的X偏移量
* @param y 距离右下角的Y偏移量
* @param alpha 透明度, 选择值从0.0~1.0: 完全透明~完全不透明
* @return BufferedImage
* @throws IOException
* @Title: 构造图片
* @Description: 生成水印并返回java.awt.image.BufferedImage
*/
public static BufferedImage watermark(File file, File waterFile, int x, int y, float alpha) throws IOException {
// 获取底图
BufferedImage buffImg = ImageIO.read(file);
// 获取层图
BufferedImage waterImg = ImageIO.read(waterFile);
// 创建Graphics2D对象,用在底图对象上绘图
Graphics2D g2d = buffImg.createGraphics();
// 获取层图的宽度
int waterImgWidth = waterImg.getWidth();
// 获取层图的高度
int waterImgHeight = waterImg.getHeight();
// 在图形和图像中实现混合和透明效果
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 绘制
g2d.drawImage(waterImg, x, y, waterImgWidth, waterImgHeight, null);
// 释放图形上下文使用的系统资源
g2d.dispose();
return buffImg;
}
/**
* 输出水印图片
*
* @param buffImg 图像加水印之后的BufferedImage对象
* @param savePath 图像加水印之后的保存路径
*/
public static void generateWaterFile(BufferedImage buffImg, String savePath) {
int temp = savePath.lastIndexOf(".") + 1;
try {
ImageIO.write(buffImg, savePath.substring(temp), new File(savePath));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
2、图片叠加主函数ImageDemo
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageDemo {
public static void main(String[] args) throws IOException {
//源文件图片路径
String sourceImage = "E:\\My Files\\MacBook.jpg";
//水印图片路径
String waterImage = "E:\\My Files\\AppleWatch.jpg";
//生成图片路径
String savePath = "E:\\My Files\\perfect.jpg";
BufferedImage image = ImageUtils.watermark(new File(sourceImage),new File(waterImage),180,150,0.6f);
ImageUtils.generateWaterFile(image,savePath);
}
}
3、结果