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

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("给图片添加水印图片结束...");

}

}

mysql图片添加水印_java实现图片添加水印相关推荐

  1. java 图片水印_JAVA实现图片水印

    一.JAVA图片水印实现原理 1.1.JAVA图片水印实现思路 1.创建缓存图片对象. 2.创建Java绘图工具对象. 3.使用绘图工具对象将原图绘制到缓存图片对象. 4.使用绘图工具将水印(文字/图 ...

  2. java 修改图片分辨率_java 修改图片的像素大小,清晰度

    修改图片的像素,清晰度 代码 /** * 改变图片 像素 * * @param file * @param qality 参数qality是取值0~1范围内 清晰程度 数值越小分辨率越低 * @par ...

  3. java验证图片大小_java 校验图片的大小、尺寸、比例

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.i ...

  4. background图片叠加_java实现图片的叠加效果

    实现效果图 这个效果的实现思路是: 1.先准备一张背景图,像素自己去定.像素越高最后生成的图片会更清晰,当然图片也会越大,注意这个背景图一定要是png格式的,要放用户头像的位置要镂空,透明的. 至于为 ...

  5. java 图片操作_Java对图片的操作

    有一天我在做一个游戏的时候听说可以把图片翻转过来可以减少自己做图片的时间  所以我就在网上找了一下  发现很多文章写得特别复杂 并且有一些方法都不能在eclipse上面用,所以我就模仿网上的文章写出适 ...

  6. java实现清除图片水印_Java实现图片水印

    publicfinalclassImageUtils {publicImageUtils() { }publicfinalstaticString getPressImgPath() {returnA ...

  7. java判断图片相同_java 识别图片相似度及图片是否相同

    1.比较MD5值 判断图片是否相同 package com.zerdoor.util; import java.io.File; import java.io.FileInputStream; imp ...

  8. java实现图片验证码_JAVA实现图片验证码

    一.创建image工具类 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; i ...

  9. java jlabel图片大小_java – 调整图片大小以适应JLabel

    大纲 以下是要遵循的步骤. >将图片作为BufferedImage读取. >将BufferedImage的大小调整为另一个大小为JLabel的BufferedImage. >从调整大 ...

  10. java 实现图片旋转_java实现图片旋转

    方法一:普通方法实现图片旋转 /** * 图像旋转 * @param src * @param angel * @return */ public static BufferedImage Rotat ...

最新文章

  1. linux下inotify的使用
  2. elasticsearch入门一
  3. 运动会管理系统php,运动会管理系统源代码.doc
  4. oracle给每行加上序号,Oracle 根据分类字段给查询结果添加序号
  5. MongoDB 3.0 新增特性一览
  6. go语言服务器连接mysql,服务器mysql怎么配置才能远程连接
  7. echarts 获取点击的y轴数值_有机磷酸催化对醌的不对称直接加成反应合成轴手性芳基醌类化合物...
  8. 2019.8.21一些面试题以及记录
  9. RelativeLayout设置wrap_content无效
  10. python线程池原理_Python3线程池ThreadPoolExecutor总结
  11. matlab写的串口通信图像上位机,MATLAB的串口通信
  12. 论模式在领域驱动设计中的重要性
  13. 中缀表达式、前缀表达式、后缀表达式
  14. 三角网导线平差实例_三角网闭合导线平差计算表0
  15. 分库分表之MyCat应用
  16. android闹钟报告分析,Android AlarmClock 闹钟应用 简单分析
  17. 人人商城商品分享码添加用户的头像和昵称
  18. iOS11降级到iOS10.3.3/10.3.2教程
  19. 企业微信推送应用消息-图片(news)/图文(npmnews)/卡片/文字
  20. 用JAVA awt实现Image Asset Studio生成圆形或圆角矩形图片功能

热门文章

  1. 网口压线顺序_水晶头压线顺序
  2. Mysql数据表和表数据复制
  3. 致信息安全专业同学的一封信
  4. 计算机出现假桌面怎么解决办法,W10电脑下“AppHangXProcB1”导致桌面频繁假死如何解决?...
  5. 微软热招,一起定义未来的搜索引擎!
  6. 苹果手机用计算机打不开,苹果手机更新ios11后,照片在电脑上打不开怎么办?...
  7. 036.crud准备
  8. java求解二元二次方程_二元二次方程的解法
  9. 杂志特稿:元宇宙将重塑我们的生活,我们要确保它变得更好
  10. PBS常用基本命令------PBS入门