一、前言
通过awt包下的Graphics2D类在java平台来实现二维形状、文本和图像的复制操作控制,详情见其API文档,现在我们需要将下列图片戳伤绿色30号字体“小木人印象网”文字水印效果
二、代码示例
package jh.modules.image;@b@@b@import java.awt.Color;@b@import java.awt.Font;@b@import java.awt.Graphics2D;@b@import java.awt.Image;@b@import java.awt.image.BufferedImage;@b@import java.io.File;@b@import java.io.FileOutputStream;@b@@b@import javax.imageio.ImageIO;@b@@b@/**@b@ * 给图片添加文字水印工具类@b@ * @Version 1.0@b@ */@b@@b@public class ImgTextMarkUtils {@b@ @b@ /**@b@ * 图片添加水印方法 ,输出图片在源目录下,以"_TM_"系统时间戳组合输出@b@ * @param srcImgPath 源图片的路径@b@ * @param words 水印的文字@b@ * @param wordsColor 水印文字的颜色@b@ */@b@ public static void stamp(String srcImgPath, String words,Color wordsColor) {@b@ if(srcImgPath.contains(".")){@b@ String targetImgPath=srcImgPath.substring(0,srcImgPath.lastIndexOf("."))+"_TM"+"_"+System.currentTimeMillis()+srcImgPath.substring(srcImgPath.lastIndexOf("."));@b@ stamp(srcImgPath,targetImgPath,words,wordsColor, new Font("微软雅黑", Font.PLAIN,30),"jpg");@b@ @b@ }@b@ }@b@ @b@ @b@ /**@b@ * 图片添加水印方法@b@ * @param srcImgPath 源图片的路径@b@ * @param outImgPath 目标输出图片路径@b@ * @param words 水印的文字@b@ * @param wordsColor 设置水印文字的颜色@b@ * @param wordFont 设置水印文字字体格式@b@ * @param picSuffix 设置输出图片后缀@b@ */@b@ public static void stamp(String srcImgPath, String outImgPath, String words,Color wordsColor, Font wordFont,String picSuffix) {@b@ try {@b@ @b@ File srcImgFile = new File(srcImgPath); // 读取原图片文件内容@b@ Image srcImg = ImageIO.read(srcImgFile);@b@ int srcImgWidth = srcImg.getWidth(null);@b@ int srcImgHeight = srcImg.getHeight(null);@b@ @b@ BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);//准备设置水印效果@b@ Graphics2D g = bufImg.createGraphics();@b@ g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);@b@ g.setColor(wordsColor); //设置图片水印颜色@b@ g.setFont(wordFont);//设置水印文字字体格式@b@ int x = srcImgWidth - g.getFontMetrics(g.getFont()).charsWidth(words.toCharArray(), 0, words.length()) - 3;@b@ int y = srcImgHeight - 3;@b@ g.drawString(words, x, y);@b@ g.dispose();@b@ @b@ FileOutputStream outImgStream = new FileOutputStream(outImgPath);//输出图片路径@b@ ImageIO.write(bufImg,picSuffix, outImgStream);@b@ outImgStream.flush();@b@ outImgStream.close();@b@ } catch (Exception e) {@b@ e.printStackTrace();@b@ }@b@ }@b@ @b@ @b@ public static void main(String[] args) {@b@ ImgTextMarkUtils.stamp("c:/Users/nijun/Desktop/2015-12-06_165048.jpg", "小木人印象网",Color.blue);@b@ }@b@}
运行main方法,输出结果如下