java怎么让图片铺满_Java实现水印铺满图片

这个Java类展示了如何在图片上添加水印并使其铺满整张图片。通过设置透明度、旋转角度和水印间隔,可以自定义水印效果。代码中包含了多种添加水印的方法,并提供了示例来演示其用法。
摘要由CSDN通过智能技术生成

public class ImageMarkUtil {

/** 水印透明度 */

private static float alpha = 0.5f;

/** 水印图片旋转角度 */

private static double degree = 0f;

private static int interval = 0;

/**

* 设置水印参数,不设置就使用默认值

*

* @param alpha

* 水印透明度

* @param degree

* 水印图片旋转角度 *

* @param interval

* 水印图片间隔

*/

public static void setImageMarkOptions(float alpha, int degree,

int interval) {

if (alpha != 0.0f) {

ImageMarkUtil.alpha = alpha;

}

if (degree != 0f) {

ImageMarkUtil.degree = degree;

}

if (interval != 0f) {

ImageMarkUtil.interval = interval;

}

}

/**

* 给图片添加水印图片

*

* @param waterImgPath

* 水印图片路径

* @param srcImgPath

* 源图片路径

* @param targerPath

* 目标图片路径

*/

public static void waterMarkByImg(String waterImgPath, String srcImgPath,

String targerPath) throws Exception {

waterMarkByImg(waterImgPath, srcImgPath, targerPath, 0);

}

/**

* 给图片添加水印图片

*

* @param waterImgPath

* 水印图片路径

* @param srcImgPath

* 源图片路径

* @param targerPath

* 目标图片路径

*/

public static void waterMarkByImg(String waterImgPath, String srcImgPath) {

try {

waterMarkByImg(waterImgPath, srcImgPath, srcImgPath, 0);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 给图片添加水印图片、可设置水印图片旋转角度

*

* @param waterImgPath

* 水印图片路径

* @param srcImgPath

* 源图片路径

* @param targerPath

* 目标图片路径

* @param degree

* 水印图片旋转角度

*/

public static void waterMarkByImg(String waterImgPath, String srcImgPath,

String targerPath, double degree) throws Exception {

OutputStream os = null;

try {

Image srcImg = ImageIO.read(new File(srcImgPath));

BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),

srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);

// 1、得到画笔对象

Graphics2D g = buffImg.createGraphics();

// 2、设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,

RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg

.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);

// 3、设置水印旋转

if (0 != degree) {

g.rotate(Math.toRadians(degree),

(double) buffImg.getWidth() / 2, (double) buffImg

.getHeight() / 2);

}

// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度

ImageIcon imgIcon = new ImageIcon(waterImgPath);

// 5、得到Image对象。

Image img = imgIcon.getImage();

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,

alpha));

// 6、水印图片的位置

for (int height = interval + imgIcon.getIconHeight(); height < buffImg

.getHeight(); height = height +interval+ imgIcon.getIconHeight()) {

for (int weight = interval + imgIcon.getIconWidth(); weight < buffImg

.getWidth(); weight = weight +interval+ imgIcon.getIconWidth()) {

g.drawImage(img, weight - imgIcon.getIconWidth(), height

- imgIcon.getIconHeight(), null);

}

}

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

// 7、释放资源

g.dispose();

// 8、生成图片

os = new FileOutputStream(targerPath);

ImageIO.write(buffImg, "JPG", os);

System.out.println("图片完成添加水印图片");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

System.out.println("..添加水印图片开始...");

/**

* watermarkPath 水印图片地址 加水印图片地址 上传成功后文件地址

*/

//修改默认参数

ImageMarkUtil.setImageMarkOptions(0.0f, 0,

20);

String watermarkPath = "d:/watermark.png"; //测试水印图片

String imgPath = "d:/22.jpg";//测试需加水印图片

ImageMarkUtil.waterMarkByImg(watermarkPath, imgPath);

System.out.println("..添加水印图片结束...");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值