java图片添加水印实例代码分享

 更新时间:2020年04月18日 10:40:26   作者:dy_smile  
这篇文章主要为大家详细介绍了java图片添加水印实例代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家介绍了java图片添加水印实例代码,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(); 
  } 
 } 
 } 
} 

再为大家分享一例:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
 
public final class ImageUtils {
 public ImageUtils() {
 
 }
 
 /**
 * public final static String getPressImgPath() { return ApplicationContext
 * .getRealPath("/template/data/util/shuiyin.gif"); }
 */
 
 /**
 * 把图片印刷到图片上
 * 
 * @param pressImg --
 *  水印文件
 * @param targetImg --
 *  目标文件
 * @param x
 *  --x坐标
 * @param y
 *  --y坐标
 */
 public final static void pressImage(String pressImg, String targetImg,
  int x, int y) {
 try {
  //目标文件
  File _file = new File(targetImg);
  Image src = ImageIO.read(_file);
  int wideth = src.getWidth(null);
  int height = src.getHeight(null);
  BufferedImage image = new BufferedImage(wideth, height,
   BufferedImage.TYPE_INT_RGB);
  Graphics g = image.createGraphics();
  g.drawImage(src, 0, 0, wideth, height, null);
 
  //水印文件
  File _filebiao = new File(pressImg);
  Image src_biao = ImageIO.read(_filebiao);
  int wideth_biao = src_biao.getWidth(null);
  int height_biao = src_biao.getHeight(null);
  g.drawImage(src_biao, (wideth - wideth_biao) / 2,
   (height - height_biao) / 2, wideth_biao, height_biao, null);
  //水印文件结束
  g.dispose();
  FileOutputStream out = new FileOutputStream(targetImg);
  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  encoder.encode(image);
  out.close();
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
 
 /**
 * 打印文字水印图片
 * 
 * @param pressText
 *  --文字
 * @param targetImg --
 *  目标图片
 * @param fontName --
 *  字体名
 * @param fontStyle --
 *  字体样式
 * @param color --
 *  字体颜色
 * @param fontSize --
 *  字体大小
 * @param x --
 *  偏移量
 * @param y
 */
 
 public static void pressText(String pressText, String targetImg,
  String fontName, int fontStyle, int color, int fontSize, int x,
  int y) {
 try {
  File _file = new File(targetImg);
  Image src = ImageIO.read(_file);
  int wideth = src.getWidth(null);
  int height = src.getHeight(null);
  BufferedImage image = new BufferedImage(wideth, height,
   BufferedImage.TYPE_INT_RGB);
  Graphics g = image.createGraphics();
  g.drawImage(src, 0, 0, wideth, height, null);
  
  g.setColor(Color.RED);
  g.setFont(new Font(fontName, fontStyle, fontSize));
 
  g.drawString(pressText, wideth - fontSize - x, height - fontSize
   / 2 - y);
  g.dispose();
  FileOutputStream out = new FileOutputStream(targetImg);
  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  encoder.encode(image);
  out.close();
 } catch (Exception e) {
  System.out.println(e);
 }
 }
 
 public static void main(String[] args) {
 pressImage("F:/logo.png",  "F:/123.jpg", 0, 0);
 }
}

希望本文所述对大家用java语言实现图片添加水印有所帮助。

相关文章

  • 电脑上安装多个JDK版本时该如何自由切换(详细图文)

    电脑上安装多个JDK版本时该如何自由切换(详细图文)

    我们在学习的过程中经常用到不同的jdk版本,那么如何在一台电脑上同时安装多个jdk版本并进行切换呢,这篇文章主要给大家介绍了关于电脑上安装多个JDK版本时该如何自由切换的相关资料,需要的朋友可以参考下
    2023-10-10
  • spring 整合JDBC和AOP事务的方法

    spring 整合JDBC和AOP事务的方法

    这篇文章主要介绍了spring 整合JDBC和AOP事务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Spring注解@Value及属性加载配置文件方式

    Spring注解@Value及属性加载配置文件方式

    这篇文章主要介绍了Spring注解@Value及属性加载配置文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java中通过Class类获取Class对象的方法详解

    Java中通过Class类获取Class对象的方法详解

    这篇文章主要给大家介绍了关于Java中通过Class类获取Class对象的方法,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • Springboot整合camunda+mysql的集成流程分析

    Springboot整合camunda+mysql的集成流程分析

    本文介绍基于mysql数据库,如何实现camunda与springboot的集成,如何实现基于springboot运行camunda开源流程引擎,本文分步骤图文相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • Java中死锁产生的原因有哪些?

    Java中死锁产生的原因有哪些?

    这篇文章主要介绍了Java中死锁产生的原因有哪些?死锁即Dead Lock指的是两个或两个以上的运算单元,下文关于其产生的原因,需要的小伙伴可以参考一下
    2022-05-05
  • Java适配器模式之如何灵活应对不匹配的接口

    Java适配器模式之如何灵活应对不匹配的接口

    本文介绍了Java中的适配器模式,包括对象适配器模式和接口适配器模式,适配器模式通过将一个类的接口转换成客户期望的另一个接口,解决了不同接口之间的不兼容问题,它提高了系统的灵活性、复用性和解耦性,需要的朋友可以参考下
    2024-10-10
  • Java中的DecimalFormat用法解析

    Java中的DecimalFormat用法解析

    这篇文章主要介绍了Java中的DecimalFormat用法解析,DecimalFormat是Java中用于格式化数字的类,它提供了一种简单而灵活的方式来格式化数字,包括指定小数位数、千位分隔符、货币符号等,需要的朋友可以参考下
    2023-10-10
  • idea激活ActivateJrebel热部署的方法详解

    idea激活ActivateJrebel热部署的方法详解

    这篇文章主要介绍了idea激活ActivateJrebel热部署的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • spring webflux自定义netty 参数解析

    spring webflux自定义netty 参数解析

    这篇文章主要介绍了spring webflux自定义netty 参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论