为图片加水印-Java

程序中提供两个方法,一个使用一个透明的GIF文件(mark.gif)为图片加水印,另一个将一个字符串作为水印加入图片中,两个方法均可设置透明度,并能设置倾斜角度。

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;

import javax.imageio.ImageIO;

public class PressWaterMark {

	/**
	 * @param srcFile
	 *            要加水印的源文件
	 * @param waterMarkFile
	 *            水印文件,为保证质量,最好使用Gif格式,背景设为透明
	 * @param alpha
	 *            透明度,0~1之间,0透明,1不透明
	 * @param degree
	 *            水印旋转角度
	 * @throws Exception
	 *             使用一个水印文件为源文件加上水印,水印铺满全部图片
	 */
	public final static void pressImage(File srcFile, File waterMarkFile,
			float alpha, double degree) throws Exception {
		// 加载目标图片
		Image srcImg = ImageIO.read(srcFile);
		int src_width = srcImg.getWidth(null);
		int src_height = srcImg.getHeight(null);
		// 将图片加载到内存
		BufferedImage bufImg = new BufferedImage(src_width, src_height,
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g = bufImg.createGraphics();
		g.drawImage(srcImg, 0, 0, src_width, src_height, null);
		// 加载水印图片
		Image waterMarkImage = ImageIO.read(waterMarkFile);
		int w_width = waterMarkImage.getWidth(null);
		int w_height = waterMarkImage.getHeight(null);
		// 设置透明度
		g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
				alpha));
		g.rotate(-Math.PI / 180 * degree, (double) bufImg.getWidth() / 2,
				(double) bufImg.getHeight() / 2);

		// 设置水印图片位置

		for (int x = 0; x < src_width; x += 3 * w_width)
			for (int y = 0; y < src_height; y += 3 * w_height)
				// 将水印图片“画”在目标图片的指定位置
				g.drawImage(waterMarkImage, x, y, w_width, w_height, null);
		g.dispose();
		ImageIO.write(bufImg, "JPG", srcFile);
	}

	/**
	 * @param waterText
	 *            水印字符串
	 * @param font
	 *            字符串字体
	 * @param alpha
	 *            透明度,0~1之间,0透明,1不透明
	 * @param degree
	 *            字符串旋转角度
	 * @throws Exception
	 *             ImageIO读取失败时,抛出异常
	 */
	public static void pressText(File scrFile, String waterText, Font font,
			float alpha, double degree) throws Exception {
		// 加载目标图片
		Image srcImg = ImageIO.read(scrFile);
		int src_width = srcImg.getWidth(null);
		int src_height = srcImg.getHeight(null);

		// 将目标图片加载到内存
		BufferedImage bufImg = new BufferedImage(src_width, src_height,
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g = bufImg.createGraphics();
		g.drawImage(srcImg, 0, 0, src_width, src_height, null);

		// 设置水印文字透明度
		g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
				alpha));
		g.rotate(-Math.PI / 180 * degree, (double) bufImg.getWidth() / 2,
				(double) bufImg.getHeight() / 2);
		g.setFont(font);
		g.setColor(Color.CYAN);

		// 设置水印文字的位置
		int t_width = font.getSize() * waterText.length();
		int t_height = font.getSize();
		// 写水印文字
		for (int x = 0; x < src_width; x += t_width + 150)
			for (int y = 0; y < src_height; y += 3 * t_height)
				// 将水印图片“画”在目标图片的指定位置
				g.drawString(waterText, x, y);
		g.dispose();
		// 保存目标图片
		ImageIO.write(bufImg, "JPG", scrFile);
	}

	public static void main(String args[]) throws Exception {
		File f = new File("d:/ccc");
		File imgFiles[] = f.listFiles(new ImageFilter());
		for (File x : imgFiles) {
			System.out.println(x.getName() + "正在加水印...");
			pressImage(x, new File("d:/ccc/mark.gif"), 0.2f, 10);
		}
		System.out.println("谢谢使用!");
	}
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值