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语言实现图片添加水印有所帮助。

(0)

相关推荐

  • Java图片处理 (文字水印、图片水印、缩放、补白)代码实例

    package com.hmw.picMark; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.im

  • JAVA图片水印开发案例详解

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上搭建的,基于Spring+SpringMVC.如果有错误还请大家指正. 最后源码地址在:https://github.com/allanzhuo/myport.git . 简单介绍 水印开发是web开发中一种比较常见的功能,实现的代码很简单,具体的实现步骤我也会以代码为基础详细讲述.其实以我个人的理

  • java.imageIo给图片添加水印的实现代码

    复制代码 代码如下: package com.blogs.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;impor

  • java实现图片上加文字水印(SpringMVC + Jsp)

    看之前要先对SpringMVC进行了解打好基础,下面直接先看效果图 代码编写 1.导入相关架包 2.配置文件 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"

  • 简单的java图片处理类(图片水印 图片缩放)

    复制代码 代码如下: import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Toolkit;import java.awt.color.ColorSpace;import java.awt.geom.AffineTransfo

  • java 图片加水印实例代码

    复制代码 代码如下: try {            String targetImg = "D:/Blue hills.jpg";//          String pressImg = "D:/20130311220300.jpg";            String pressImg = "D:/html_original.jpg"; File f1 = new File(targetImg);            Image sr

  • 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

  • Java反射机制实例代码分享

    本文旨在对Java反射机制有一个全面的介绍,希望通过本文,大家会对Java反射的相关内容有一个全面的了解. 阅读本文之前,大家可先行参阅<重新理解Java泛型>. 前言 Java反射机制是一个非常强大的功能,在很多大型项目比如Spring, Mybatis都可以看见反射的身影.通过反射机制我们可以在运行期间获取对象的类型信息,利用这一特性我们可以实现工厂模式和代理模式等设计模式,同时也可以解决Java泛型擦除等令人苦恼的问题.本文我们就从实际应用的角度出发,来应用一下Java的反射机制. 反射

  • Java编程几个循环实例代码分享

    有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下. 1.循环输出1到100之间所有能被3或能被4整除的数. package com.hz.loop02; /** * 1.循环输出1到100之间所有能被3或能被4整除的数. * @author ztw * */ public class Practice01 { public static void main(String[] args) { for (int i=1;i<=100;i++){ //判断下是否

  • java date类与string类实例代码分享

    Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclonggetTime() 返回自新世纪以来的毫秒数,可以用于时间计算. [例3.10]测试执行循环花费的时间(数量级为毫秒),具体时间情况如图3.9所示.源程序代码如下: //程序文件名为UseDate.java import java.util.Date; public class UseDate { pu

  • java实现爬虫爬网站图片的实例代码

    第一步,实现 LinkQueue,对url进行过滤和存储的操作 import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; public class LinkQueue { // 已访问的 url 集合 private static Set<String> visitedUrl = Collecti

  • Java生成表格图片的实例代码

    主要代码: /** * 生成图片 * @param cellsValue 以二维数组形式存放 表格里面的值 * @param path 文件保存路径 */ public void myGraphicsGeneration(String cellsValue[][], String path) { // 字体大小 int fontTitileSize = 15; // 横线的行数 int totalrow = cellsValue.length+1; // 竖线的行数 int totalcol =

  • Java实现TFIDF算法代码分享

    算法介绍 概念 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降.TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级.除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评

  • python使用pil库实现图片合成实例代码

    本文研究的主要是python PIL实现图片合成的相关内容,具体介绍如下,分享实例代码. 在项目中需要将两张图片合在一起.遇到两种情况,一种就是两张非透明图片的合成, 一种是涉及到透明png的合成. 相关API见 http://pillow.readthedocs.io/en/latest/reference/Image.html 第一种情况,直接将两张图片合在一起就可以了.如下图所示,将两张图片合在一起 += 详细代码 from PIL import Image #加载底图 base_img

  • JAVA验证码工具实例代码

    工具类: package com.lhy.web.servlet; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileNotFoundException; import java.io.FileOutputStream; import

  • android 实现APP中改变头像图片的实例代码

    具体代码如下所示: package com.example.studyapplication.fragment; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory

随机推荐