给图片加水印的代码java_Java为图片加水印的代码

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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;

import javax.swing.ImageIcon;

/*******************************************************************************

* Description: 图片水印工具类

* Copyright: Copyright (c) 2011

* Company: Founder

* Project: CMS

*

* @Author taoxg

* @version 1.0

* @See

* HISTORY 2011-9-27 taoxg create

******************************************************************************/

public class ImageMarklogoUtil {

// 水印透明度

private static float alpha = 0.5f;

// 水印横向位置

private static int positionWidth = 150;

// 水印纵向位置

private static int positionHeight = 300;

// 水印文字字体

private static Font font = new Font("宋体",Font.BOLD,30);

// 水印文字颜色

private static Color color = Color.red;

/**

*

* @param alpha

* 水印透明度

* @param positionWidth

* 水印横向位置

* @param positionHeight

* 水印纵向位置

* @param font

* 水印文字字体

* @param color

* 水印文字颜色

*/

public static void setImageMarkOptions(float alpha,int positionWidth,int positionHeight,Font font,Color color){

if(alpha!=0.0f)ImageMarklogoUtil.alpha = alpha;

if(positionWidth!=0)ImageMarklogoUtil.positionWidth = positionWidth;

if(positionHeight!=0)ImageMarklogoUtil.positionHeight = positionHeight;

if(font!=null)ImageMarklogoUtil.font = font;

if(color!=null)ImageMarklogoUtil.color = color;

}

/**

* 给图片添加水印图片

*

* @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 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);

// 1、得到画笔对象

Graphics2D g = buffImg.createGraphics();

// 2、设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),Image.SCALE_SMOOTH),null);

// 3、设置水印旋转

if (null != degree) {

g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2,(double) buffImg.getHeight() / 2);

}

// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度

ImageIcon imgIcon = new ImageIcon(iconPath);

// 5、得到Image对象。

Image img = imgIcon.getImage();

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));

// 6、水印图片的位置

g.drawImage(img,positionWidth,positionHeight,null);

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

// 7、释放资源

g.dispose();

// 8、生成图片

os = new FileOutputStream(targerPath);

ImageIO.write(buffImg,"JPG",os);

System.out.println("图片完成添加水印图片");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 给图片添加水印文字

*

* @param logoText

* 水印文字

* @param srcImgPath

* 源图片路径

* @param targerPath

* 目标图片路径

*/

public static void markImageByText(String logoText,String targerPath) {

markImageByText(logoText,null);

}

/**

* 给图片添加水印文字、可设置水印文字的旋转角度

*

* @param logoText

* @param srcImgPath

* @param targerPath

* @param degree

*/

public static void markImageByText(String logoText,Integer degree) {

InputStream is = null;

OutputStream os = null;

try {

// 1、源图片

Image srcImg = ImageIO.read(new File(srcImgPath));

BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),BufferedImage.TYPE_INT_RGB);

// 2、得到画笔对象

Graphics2D g = buffImg.createGraphics();

// 3、设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,null);

// 4、设置水印旋转

if (null != degree) {

g.rotate(Math.toRadians(degree),(double) buffImg.getHeight() / 2);

}

// 5、设置水印文字颜色

g.setColor(color);

// 6、设置水印文字Font

g.setFont(font);

// 7、设置水印文字透明度

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));

// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)

g.drawString(logoText,positionHeight);

// 9、释放资源

g.dispose();

// 10、生成图片

os = new FileOutputStream(targerPath);

ImageIO.write(buffImg,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();

}

}

}

public static void main(String [] args){

String srcImgPath = "d:/qie.jpg";

String logoText = "[ I love Qie]";

String iconPath = "d:/shuimu.jpg";

String targerTextPath = "d:/qie_text.jpg";

String targerTextPath2 = "d:/qie_text_rotate.jpg";

String targerIconPath = "d:/qie_icon.jpg";

String targerIconPath2 = "d:/qie_icon_rotate.jpg";

System.out.println("给图片添加水印文字开始...");

// 给图片添加水印文字

markImageByText(logoText,targerTextPath);

// 给图片添加水印文字,水印文字旋转-45

markImageByText(logoText,targerTextPath2,-45);

System.out.println("给图片添加水印文字结束...");

System.out.println("给图片添加水印图片开始...");

setImageMarkOptions(0.3f,1,null,null);

// 给图片添加水印图片

markImageByIcon(iconPath,targerIconPath);

// 给图片添加水印图片,水印图片旋转-45

markImageByIcon(iconPath,targerIconPath2,-45);

System.out.println("给图片添加水印图片结束...");

}

}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

总结

以上是编程之家为你收集整理的Java为图片加水印的代码全部内容,希望文章能够帮你解决Java为图片加水印的代码所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值