mysql图片添加水印_java实现图片添加水印

首先。涉及到文件就要用到文件操作,但我们这是操作图片

1、我们首先需要一个容器来存放图片ps:图片原来在磁盘(File)—-》内存(image)

2、我们要在原来的图片上加水印,就相当于要在纸上画画。。。所以我们的画纸应该是原图的一的副本,我们我们需要得到副本并用容器容乃他,

3、画画需要画笔对吧,我们要得到画副本的笔,当然比肯定有粗细。。。参数设置。。

4、如果就开始画了。。。首先的找位置。。。我们的图片就像桌面是二维图形,就用起始坐标,还是按部就班就从(0,0)开始呢

5、然后万一我们想歇着画了呢,java有旋转画布的方法

6、开始画画了。。。。给定位置。。。给定内容。。下笔了。。。

7、花完了。。是不是就要收拾现场了。。。。收拾好笔,将内存的image输出到磁盘文件。。。。

上代码

package com.funi.test;

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: 图片水印工具类

* @author zengshunyao

* @version 1.0

*/

public class ImageRemarkUtil {

// 水印透明度

private static float alpha = 0.5f;

// 水印横向位置

private static int positionWidth = 150;

// 水印纵向位置

private static int positionHeight = 300;

// 水印文字字体

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

// 水印文字颜色

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)

ImageRemarkUtil.alpha = alpha;

if (positionWidth != 0)

ImageRemarkUtil.positionWidth = positionWidth;

if (positionHeight != 0)

ImageRemarkUtil.positionHeight = positionHeight;

if (font != null)

ImageRemarkUtil.font = font;

if (color != null)

ImageRemarkUtil.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 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);

// 1、得到画笔对象

Graphics2D g = buffImg.createGraphics();

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

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

// 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 srcImgPath,

String targerPath) {

markImageByText(logoText, srcImgPath, targerPath, null);

}

/**

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

*

* @param logoText

* @param srcImgPath

* @param targerPath

* @param degree

*/

public static void markImageByText(String logoText, String srcImgPath,

String targerPath, Integer degree) {

InputStream is = null;

OutputStream os = null;

try {

// 1、源图片

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

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

srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);

// 2、得到画笔对象

Graphics2D g = buffImg.createGraphics();

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

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

// 4、设置水印旋转

if (null != degree) {

g.rotate(Math.toRadians(degree),

(double) buffImg.getWidth() / 2,

(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, positionWidth, positionHeight);

// 9、释放资源

g.dispose();

// 10、生成图片

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();

}

}

}

public static void main(String[] args) {

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

String logoText = "复 印 无 效";

String iconPath = "d:/2.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, srcImgPath, targerTextPath);

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

markImageByText(logoText, srcImgPath, targerTextPath2, -45);

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

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

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

// 给图片添加水印图片

markImageByIcon(iconPath, srcImgPath, targerIconPath);

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

markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45);

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

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值