package com.xiaowu.drawwater.demo;

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.FileOutputStream;
import java.io.OutputStream; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; /**
* 在原图片的基础之上添加水印效果
*
*
*
* @author WQ
*
*/
public class ImageMarkLogoByIcon { /**
* @param args
*/
public static void main(String[] args) {
String srcImgPath = "D:/Test123/car.png";
String iconPath = "D:/Test123/deal.png";
String targerPath = "D:/Test123/img_mark_icon.jpg";
String targerPath2 = "D:/Test123/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.4f; // 透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha)); // 表示水印图片的位置
g.drawImage(img, 15, 30, 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();
}
}
}
}

效果图:

最新文章

  1. 浏览器桌面通知--Notification
  2. visual foxpro命令
  3. 符号(void *)何解?符号(void **)又何解??
  4. APP测试流程(个人整理)
  5. JAVA多线程经典范列:生产者与消费者
  6. [转]给C++初学者的50个忠告
  7. Directadmin清空所有Tickets命令
  8. Linux定时运行与开机运行任务
  9. (C)学生成绩管理系统
  10. Delphi 函数指针(三大好处:灵活,委托的本质,回调机制),还可把函数指针当参数传入
  11. nand驱动移植
  12. Linux学习——shell编程之环境变量配置文件
  13. Dynamics CRM 安装Microsoft Dynamics CRM Reporting Extensions
  14. 51nod1363 最小公倍数之和
  15. Angular2入门:TypeScript的类 - 参数属性:定义和初始化类成员
  16. 十大经典排序算法的python实现
  17. java 面向对象基本知识
  18. 关于TerraBuilder的扩展开发
  19. ClassicFTP for Mac(FTP 客户端)破解版安装
  20. java基本知识归集

热门文章

  1. DotNet 学习笔记 应用状态管理
  2. JavaScript DOM编程艺术 读书笔记
  3. SpringMvc基础知识(二) springmvc和mybatis整合
  4. JavaScript设置获取和设置属性的方法
  5. Oracle 11g 安装环境配置脚本
  6. js面向对象编程(二)构造函数的继承(转载)
  7. tarjan算法和Kosaraju算法
  8. vmware的3种网络模式
  9. 【SQL】单个表的查询
  10. PYTHON设计模式学习(3):Singleton pattern