java生成图片加水印_java 为图片添加水印 示例

【实例简介】

为图片添加水印

【核心代码】

/**

* 添加水印

* @param imagePath      图片绝对路径

* @param watermarkPath  水印图片绝对路径

* @param position  水印图片位置

* @return 生成水印图片的绝对路径

*/

public static String addWatermark(String imagePath, String watermarkPath, String position) {

logger.info("为图片({})在位置{}添加水印({})", imagePath, position, watermarkPath);

if (StringUtils.isNotBlank(imagePath) && StringUtils.isNotBlank(watermarkPath)) {

File image = new File(imagePath);

File watermark = new File(watermarkPath);

Position pos = getPostion(position);

if (image.isFile() && image.exists() && watermark.isFile()) {

try {

BufferedImage bi = ImageIO.read(image);

Builder builder = Thumbnails.of(imagePath);

BufferedImage watermarkImg = ImageIO.read(watermark);

File newWatermark = null;

// 原图的宽或高是水印图片宽或高的2倍及以上,则直接打上水印原图;否则缩略水印图片,以原图宽或高的二分之一

if (bi.getWidth() / watermarkImg.getWidth() <= 2 || bi.getHeight() / watermarkImg.getHeight() <= 2) {

newWatermark = genNewWatermark(watermarkPath, bi.getWidth() / 2, bi.getHeight() / 2);

watermarkImg = ImageIO.read(newWatermark);

}

builder.size(bi.getWidth(), bi.getHeight());

if(bi.getType() == BufferedImage.TYPE_BYTE_INDEXED){

builder.imageType(BufferedImage.TYPE_INT_ARGB);

}

if(pos instanceof Coordinate){

serialWatermark(builder, bi, watermarkImg);

}else{

builder.watermark(pos, watermarkImg, Float.valueOf(PropertyUtil.get("watermarkOpacity")));// watermark(位置,水印图,透明度)

}

String newImagePath = generateNewFilePath(imagePath);

builder.outputQuality(Float.valueOf(PropertyUtil.get("watermarkQuality"))).toFile(newImagePath);// 保存水印图的质量0-1

if (newWatermark != null) {

newWatermark.delete();

}

return newImagePath;

} catch (Exception e) {

logger.error("水印图片出错", e);

return null;

}

} else {

logger.error("图片或者水印不存在");

return null;

}

} else {

logger.error("图片或者水印参数为null");

return null;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值