Java实现给图片添加水印
2017-11-07 15:20
465 查看
原文转载自:http://blog.csdn.net/dy_smile/article/details/6722907 ,有做部分修改
给图片添加图片/文字水印(源图片必须要比水印图片大)
给图片添加图片/文字水印(源图片必须要比水印图片大)
package com.demo.demo; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.font.TextAttribute; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.text.AttributedCharacterIterator; import java.text.AttributedString; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 图片水印Demo * @author thinkpad * */ public class ImageMarkLogoByIcon { public static void main(String[] args) { String srcImgPath = "C:\\Users\\thinkpad\\Desktop\\timg.jpg"; String iconPath = "C:\\Users\\thinkpad\\Desktop\\waterMarking.png"; String targerPath = "C:\\Users\\thinkpad\\Desktop\\水印测试.png"; String targerPath2 = "C:\\Users\\thinkpad\\Desktop\\img_mark_icon_rotate.jpg"; //水印内容 String waterMarkContent="图片来源:http://www.baidu.com"; //水印图片色彩以及透明度 Color color=new Color(255,255,255,128); //水印字体 Font font = new Font("微软雅黑", Font.PLAIN, 35); // 给图片添加水印 // ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath); // 给图片添加水印,水印旋转-45 // ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2, // -45); //给图片添加文字水印 ImageMarkLogoByIcon.addTextWaterMark(srcImgPath,targerPath, waterMarkContent, color,font); } /** * 给图片添加水印 * @param iconPath 水印图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 */ public static void markImageByIcon(String iconPath, String srcImgPath, String targerPath) { markImageByIcon(iconPath, srcImgPath, targerPath, null); } /** * 给图片添加水印、可设置水印图片旋转角度 * @param iconPath 水印图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 * @param degree 水印图片旋转角度 */ public static void markImageByIcon(String iconPath, String srcImgPath, String targerPath, Integer degree) { 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); // 得到画笔对象 // Graphics g= buffImg.getGraphics(); Graphics2D g = buffImg.createGraphics(); // 设置对线段的锯齿状边缘处理 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); if (null != degree) { // 设置水印旋转 g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg .getHeight() / 2); } // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度 ImageIcon imgIcon = new ImageIcon(iconPath); // 得到Image对象。 Image img = imgIcon.getImage(); // float alpha = 0.5f; // 透明度 (数值越大,透明度越小) float alpha = 1f; // 透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 表示水印图片的位置 int iconWidth = img.getWidth(null); //水印图片宽度 int iconHeight = img.getHeight(null); //水印图片高度 // g.drawImage(img, 水印位置的横坐标, 水印位置的纵坐标,水印宽度, 水印高度, null); g.drawImage(img, buffImg.getWidth() - iconWidth, buffImg.getHeight() -iconHeight , iconWidth, iconHeight, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); g.dispose(); os = new FileOutputStream(targerPath); // 生成图片 ImageIO.write(buffImg, "JPG", os); System.out.println("图片完成添加Icon印章。。。。。。"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 给图片添加文字水印 * @param srcImgPath 源图片路径 * @param tarImgPath 保存的图片路径 * @param waterMarkContent 水印内容 * @param markContentColor 水印颜色 * @param font 水印字体 */ public static void addTextWaterMark(String srcImgPath, String tarImgPath, String waterMarkContent,Color markContentColor,Font font) { try { // 读取原图片信息 File srcImgFile = new File(srcImgPath);//得到文件 Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片 int srcImgWidth = srcImg.getWidth(null);//获取图片的宽 int srcImgHeight = srcImg.getHeight(null);//获取图片的高 // 加水印 BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g = bufImg.createGraphics(); g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null); g.setColor(markContentColor); //根据图片的背景设置水印颜色 g.setFont(font); //设置字体 //设置水印的坐标 int x = srcImgWidth - 2 * getWatermarkLength(waterMarkContent, g); int y = srcImgHeight - getWatermarkLength(waterMarkContent, g); System.out.println("源图宽度:"+srcImgWidth+" ,高度:"+srcImgHeight); System.out.println("水印宽度:"+getWatermarkLength(waterMarkContent, g)+" ,高度:"+getWatermarkLength(waterMarkContent, g)); System.out.println("水印坐标的X轴:"+x+" ,Y轴:"+y); g.drawString(waterMarkContent, x, y); //画出水印 g.dispose(); // 输出图片 FileOutputStream outImgStream = new FileOutputStream(tarImgPath); ImageIO.write(bufImg, "jpg", outImgStream); System.out.println("添加水印完成"); outImgStream.flush(); outImgStream.close(); } catch (Exception e) { // TODO: handle exception } } public static int getWatermarkLength(String waterMarkContent, Graphics2D g) { return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length()); } }
相关文章推荐
- Java实现给图片添加水印
- Java实现图片添加水印
- JAVA实现图片的修改,添加文字水印效果
- java实现给图片添加水印、透明度
- java用内部类实现对图片的处理,缩放,添加水印,裁切
- java实现给图片添加水印和文字
- Java实现给图片添加水印
- java实现给图片添加水印
- java实现给图片添加水印
- Java实现给图片添加水印
- Java实现图片添加水印
- Java实现给图片添加水印
- java实现给图片添加水印
- java实现给图片添加水印
- java实现给图片添加水印和文字
- java实现图片水印的添加
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- Java实现给图片添加水印
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
- 【J2SE】Java实现给图片添加水印