java 图片拉伸_java给图片添加图片水印,设置样式平铺,拉伸

import javax.imageio.ImageIO;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

public class ImageUtil {

/**

* 给图片添加水印

* @param originImgPath 原始图片的路径

* @param targetImgPath 添加水印后图片的保存路径

* @param markImgPath 水印的路径

* @param mode 内部枚举类,用于指定水印铺设的样式,平铺,拉伸等

* @param margin_x 水印之间的水平间距

* @param margin_y 水印之间的垂直间距

* @param opacity 水印透明度

* @param markAngle 水印旋转角度,应在正负45度之间

* @throws IOException

*/

public static void markImage(String originImgPath,String targetImgPath,String markImgPath,int mode,int margin_x,int margin_y,float opacity,double markAngle) throws IOException {

if(markAngle>45||markAngle

throw new RuntimeException("旋转角度必须在正负45度之间。");

}

BufferedImage originImg= ImageIO.read(new File(originImgPath));

BufferedImage markImage = ImageIO.read(new File(markImgPath));

Graphics2D graphics = (Graphics2D) originImg.getGraphics();

graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, opacity));

graphics.rotate(markAngle);

if(mode == PAINT_MODE.TILED.mode){

int canvasHeight = originImg.getHeight();

int canvasWidth = originImg.getWidth();

int markHeight = markImage.getHeight();

int markWidth = markImage.getHeight();

int interval = markWidth+markHeight;

for(int i=-canvasHeight;i

for(int j=-canvasWidth;j

graphics.drawImage(markImage,i,j,markImage.getWidth(),markImage.getHeight(),null);

}

}

}

graphics.dispose();

ImageIO.write(originImg,"png",new File(targetImgPath));

}

//内部枚举类

enum PAINT_MODE{

REGULAR(0),//常规

TILED(1),//平铺

STRETCHED(2);//拉伸

private int mode;

PAINT_MODE(int mode){

this.mode = mode;

}

}

//测试main方法

public static void main(String[] args) {

try {

markImage("D:/source.png","D:/target.png","D:/mark.png",PAINT_MODE.TILED.mode,50,50,0.5f,-45);

} catch (IOException e) {

e.printStackTrace();

}

}

}

效果图:

3edfc5ea8108a69ca01a69173cb374bd.png

issue:1.只贴了平铺样式,拉伸只需要将水印图片的长宽设置为和源图片一样大。常规样式只需不循环遍历即可。

2.旋转有一定的空间浪费,我本想通过三角函数计算旋转特定角度后循环的起止X,y轴位置,但是计算结果应用后并不能达到预期效果,只好给一个较大的定值。

3.添加文字水印更为简单,只需调用graphics2D的drawString方法,并设置字体和颜色即可。希望有需求的朋友多多动手。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值