- 浏览: 287388 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
全站唯一是我么:
请问下该功能的jdk版本是1.4的么,还是以上的?
Java实现给图片添加水印 -
Janne:
请问,你解决这问题没?是怎么回事?我今天也遇到了,没解决
myeclipse6.5中使用jax-ws启动tomcat报错问题 -
xuedong:
studypi 写道你是怎么和新浪的技术联系的?能告诉一下我吗 ...
新浪微博第三方接口调用学习 -
studypi:
你是怎么和新浪的技术联系的?能告诉一下我吗,谢谢
新浪微博第三方接口调用学习 -
dove19900520:
有用,呵呵
IE,Firefox都不放弃(兼容性问题总结)
周末在家上围脖,看到sina围脖上图片都有水印,想到Java有专门Image的处理包,同样应该可以实现水印功能,查了资料小试下来发现java实现水印还是非常方便的,水印可以是图片或者文字,而且还可以选择不同的角度旋转呢,以后有需要可以写个代码批量处理自己的图片了。
本门目录:
- 图片水印
- 文字水印
[一]、图片水印
- package michael.io.image;
- import java.awt.AlphaComposite;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.RenderingHints;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import javax.imageio.ImageIO;
- import javax.swing.ImageIcon;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageDecoder;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- /**
- * 图片水印
- * @blog http://sjsky.iteye.com
- * @author Michael
- */
- public class ImageMarkLogoByIcon {
- /**
- * @param args
- */
- public static void main(String[] args) {
- String srcImgPath = "d:/test/michael/myblog_01.png";
- String iconPath = "d:/test/michael/blog_logo.png";
- String targerPath = "d:/test/michael/img_mark_icon.jpg";
- String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg";
- // 给图片添加水印
- ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath);
- // 给图片添加水印,水印旋转-45
- ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2,
- -45);
- }
- /**
- * 给图片添加水印
- * @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; // 透明度
- g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
- alpha));
- // 表示水印图片的位置
- g.drawImage(img, 150, 300, 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();
- }
- }
- }
- }
package michael.io.image; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageDecoder; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 图片水印 * @blog http://sjsky.iteye.com * @author Michael */ public class ImageMarkLogoByIcon { /** * @param args */ public static void main(String[] args) { String srcImgPath = "d:/test/michael/myblog_01.png"; String iconPath = "d:/test/michael/blog_logo.png"; String targerPath = "d:/test/michael/img_mark_icon.jpg"; String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg"; // 给图片添加水印 ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath); // 给图片添加水印,水印旋转-45 ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2, -45); } /** * 给图片添加水印 * @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; // 透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 表示水印图片的位置 g.drawImage(img, 150, 300, 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(); } } } }
原始图片myblog_01.jpg:
水印图片blog_logo.png:
添加水印后的效果图:
水印图标旋转的效果图:
[二]、文字水印
- package michael.io.image;
- 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.image.BufferedImage;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import javax.imageio.ImageIO;
- /**
- * 文字水印
- * @blog http://sjsky.iteye.com
- * @author Michael
- */
- public class ImageMarkLogoByText {
- /**
- * @param args
- */
- public static void main(String[] args) {
- String srcImgPath = "d:/test/michael/myblog_01.jpg";
- String logoText = "[ 测试文字水印 http://sjsky.iteye.com ]";
- String targerPath = "d:/test/michael/img_mark_text.jpg";
- String targerPath2 = "d:/test/michael/img_mark_text_rotate.jpg";
- // 给图片添加水印
- ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath);
- // 给图片添加水印,水印旋转-45
- ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath2, -45);
- }
- /**
- * 给图片添加水印
- * @param logoText
- * @param srcImgPath
- * @param targerPath
- */
- public static void markByText(String logoText, String srcImgPath,
- String targerPath) {
- markByText(logoText, srcImgPath, targerPath, null);
- }
- /**
- * 给图片添加水印、可设置水印的旋转角度
- * @param logoText
- * @param srcImgPath
- * @param targerPath
- * @param degree
- */
- public static void markByText(String logoText, String srcImgPath,
- String targerPath, Integer degree) {
- // 主图片的路径
- InputStream is = null;
- 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);
- }
- // 设置颜色
- g.setColor(Color.red);
- // 设置 Font
- g.setFont(new Font("宋体", Font.BOLD, 30));
- float alpha = 0.5f;
- g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
- alpha));
- // 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) .
- g.drawString(logoText, 150, 300);
- g.dispose();
- os = new FileOutputStream(targerPath);
- // 生成图片
- ImageIO.write(buffImg, "JPG", os);
- System.out.println("图片完成添加文字印章。。。。。。");
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (null != is)
- is.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != os)
- os.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
package michael.io.image; 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.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; /** * 文字水印 * @blog http://sjsky.iteye.com * @author Michael */ public class ImageMarkLogoByText { /** * @param args */ public static void main(String[] args) { String srcImgPath = "d:/test/michael/myblog_01.jpg"; String logoText = "[ 测试文字水印 http://sjsky.iteye.com ]"; String targerPath = "d:/test/michael/img_mark_text.jpg"; String targerPath2 = "d:/test/michael/img_mark_text_rotate.jpg"; // 给图片添加水印 ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath); // 给图片添加水印,水印旋转-45 ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath2, -45); } /** * 给图片添加水印 * @param logoText * @param srcImgPath * @param targerPath */ public static void markByText(String logoText, String srcImgPath, String targerPath) { markByText(logoText, srcImgPath, targerPath, null); } /** * 给图片添加水印、可设置水印的旋转角度 * @param logoText * @param srcImgPath * @param targerPath * @param degree */ public static void markByText(String logoText, String srcImgPath, String targerPath, Integer degree) { // 主图片的路径 InputStream is = null; 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); } // 设置颜色 g.setColor(Color.red); // 设置 Font g.setFont(new Font("宋体", Font.BOLD, 30)); float alpha = 0.5f; g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) . g.drawString(logoText, 150, 300); g.dispose(); os = new FileOutputStream(targerPath); // 生成图片 ImageIO.write(buffImg, "JPG", os); System.out.println("图片完成添加文字印章。。。。。。"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != is) is.close(); } catch (Exception e) { e.printStackTrace(); } try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } } }
添加文字水印后的效果图如下:
文字旋转后的效果图如下:
本文连接:http://sjsky.iteye.com/blog/1154390
转自:Michael's blog @ http://sjsky.iteye.com
发表评论
-
eclipse中安装clover后不显示的问题
2015-01-09 15:04 734最近公司要测下,测试中的代码覆盖率,用到了clover,在 ... -
一个效果非常不错的JAVA数据库连接池 .
2011-12-27 10:50 904来源: http://hi.baidu.com/guowei ... -
通过java查询数据库表结构 .
2011-11-22 11:40 1495public static void getConnAndT ... -
JDBC如何判断数据库的表是否存在
2011-11-08 17:34 1869实现原理:主要是利用DatabaseMetaData.get ... -
『JAVA基础』使用JavaMail发邮件的实例
2011-11-03 14:35 790代码一、Email_Autherticator.java 服 ... -
java 对象执行顺序
2011-09-29 16:31 874package com.tzf.test; pu ... -
Java commons-fileupload 上传文件
2011-09-26 11:51 1601看了 开心就好 的文件上传,感觉不错,和大家分享 网 ... -
JAVA基础知识精华总结
2011-09-23 17:23 7221、对象的初始化 (1)非静态对象的初始化 在创 ... -
新浪微博第三方接口调用学习
2011-09-14 16:56 3829这两天做了个接新浪微博接口的专题。呵呵,我可能已经落伍了,微 ... -
程序变量命名的几条法则:匈牙利命名法,驼峰式大小写,帕斯卡命名法
2011-09-07 20:37 20191.匈牙利命名法的好处: 从名字中就可以看出变量 ... -
操作符笔记-第一天
2011-09-04 13:30 862在最底层,Java中的数据是通过使用操作符来操作的。 ... -
java常用设计模式之备忘录模式
2011-08-29 12:26 1050------------------------------ ... -
java常用设计模式之职责链模式
2011-08-29 12:25 893---------------------- 职责链模式(C ... -
java常用设计模式之享元模式
2011-08-29 12:24 864------------------------------ ... -
java常用设计模式之状态模式
2011-08-29 12:23 1341------------------------------ ... -
java常用设计模式之代理模式
2011-08-29 12:22 1060------------------------------ ... -
java常用设计模式之适配器模式
2011-08-29 12:21 556------------------------------ ... -
java常用设计模式之外观模式
2011-08-29 12:20 633------------------------------ ... -
java常用设计模式之迭代器模式
2011-08-29 12:19 774------------------------------ ... -
java常用设计模式之观察者模式
2011-08-29 12:18 609------------------------------- ...
相关推荐
Java实现给图片添加水印
JAVA实现给图片增加图片水印或者文字水印相关依赖包。
java给图片添加水印,网站开发过程中可能需要对上传的图片添加属于本网站的水印,这是一个工具类,能实现添加文字水印和添加图片水印。
java程序对图片加水印效果,比较简单 把需要加水印的图片替代原来的图片就可以了,在代码里头可以修改水印的字
在Java中给图片添加水印是一种常见的保护图片的方法,特别是在需要防止图片被盗用或者滥用的情况下。为了实现这一功能,Java提供了多种方式,其中常用的是使用ImageIO和Apache的Commons Imaging库。 ImageIO是Java...
java Jacob完美实现word添加图片...公司最近让搞Word文档添加水印,所有下载的文档需要添加公司印章,搞了好多天才实现,利用Jacob完美实现word添加图片水印(注意需要把dll文件放到jdk的bin目录下)。欢迎大家下载指教。
Java 实现word文件增加图片水印 jacob实现 用到的jar itextpdf-5.5.2和 jacob
开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我
Java实现在图片上添加水印图片和水印文字.docJava实现在图片上添加水印图片和水印文字.docJava实现在图片上添加水印图片和水印文字.docJava实现在图片上添加水印图片和水印文字.doc
图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。
java操作excel实现水印图片
java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配,文字自动换行
水印 java Graphics2D实现文字图片水印 实现水印四个角水印
springboot实现上传图片添加水印
图片加水印 java代码实现
struts2 上传 java 图片水印 改变图片大小
Java给图片加水印地方法简单实用,可以实现个文件加个章的功能!
JAVA实现给图片增加图片水印或者文字水印,上手度好,二次开发性好
《java实现图片加水印.txt》里面装的都是给图片加水印的代码和讲解,很好资源哦
NULL 博文链接:https://1017401036.iteye.com/blog/2278723