为图片加水印-Java

来源:互联网 发布:淘宝男童棉服 编辑:程序博客网 时间:2024/06/03 19:26

程序中提供两个方法,一个使用一个透明的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("谢谢使用!");}}


 

原创粉丝点击