在原图之上再画一张图片(drawImage)或者文本文字(drawString),Java SE中提供了 java.awt.image包和javax.imageio包可以实现非常方便的实现 图片水印或者文字水印。

1.图片水印

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.FileOutputStream;

import java.io.OutputStream;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

/**

* 生成图片水印

* @author Ricky Fung

*

*/

public class WaterMarkIconTest {

/**

* @param args

*/

public static void main(String[] args) {

File srcImageFile = new File("D:/test/myblog.png");

File logoImageFile = new File("D:/test/logo.png");

File outputImageFile = new File("D:/test/myblog_water_icon.jpg");

File outputRoateImageFile = new File("D:/test/myblog_water_icon_rotate.jpg");

createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile);

createWaterMarkByIcon(srcImageFile, logoImageFile, outputRoateImageFile, 45);

}

public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile,

File outputImageFile) {

createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile, 0);

}

public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile,

File outputImageFile, double degree) {

OutputStream os = null;

try {

Image srcImg = ImageIO.read(srcImageFile);

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

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

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

ImageIcon logoImgIcon = new ImageIcon(ImageIO.read(logoImageFile));

Image logoImg = logoImgIcon.getImage();

//旋转

if (degree>0) {

g.rotate(Math.toRadians(degree),

(double) buffImg.getWidth() / 2,

(double) buffImg.getWidth() / 2);

}

float alpha = 0.8f; // 透明度

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,

alpha));

//水印 的位置

g.drawImage(logoImg, buffImg.getWidth()/3, buffImg.getHeight()/2, null);

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

g.dispose();

os = new FileOutputStream(outputImageFile);

// 生成图片

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

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

2.文字水印

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.OutputStream;

import javax.imageio.ImageIO;

/**

* 生成文字水印

* @author Ricky Fung

*

*/

public class WaterMarkTextTest {

/**

* @param args

*/

public static void main(String[] args) {

File srcImgFile = new File("D:/test/myblog.png");

String logoText = "[ 水印文字 电话邦 ]";

File outputImageFile = new File("D:/test/myblog_water_text.jpg");

File outputRotateImageFile = new File("D:/test/myblog_water_text_rotate.jpg");

createWaterMarkByText(srcImgFile, logoText, outputImageFile);

createWaterMarkByText(srcImgFile, logoText, outputRotateImageFile, 45);

}

public static void createWaterMarkByText(File srcImgFile, String logoText,

File outputImageFile) {

createWaterMarkByText(srcImgFile, logoText, outputImageFile, 0);

}

public static void createWaterMarkByText(File srcImgFile, String logoText,

File outputImageFile, double degree) {

OutputStream os = null;

try {

Image srcImg = ImageIO.read(srcImgFile);

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

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

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 (degree>0) {

g.rotate(Math.toRadians(degree),

(double) buffImg.getWidth() / 2,

(double) buffImg.getHeight() / 2);

}

g.setColor(Color.RED);

g.setFont(new Font("宋体", Font.BOLD, 36));

float alpha = 0.8f;

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,

alpha));

g.drawString(logoText, buffImg.getWidth()/3, buffImg.getHeight()/2);

g.dispose();

os = new FileOutputStream(outputImageFile);

// 生成图片

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

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

java 图片水印旋转,Java实现 图片水印或者文字水印详解相关推荐

  1. 调用百度ai接口实现图片文字识别详解

    调用百度ai接口实现图片文字识别详解 首先先介绍一下这篇博文是干嘛的,为了不浪费大家时间.公司最近和短视频公司合作,需要监控app的截图上的文字是否符合规范,也就是确保其没有违规的文字.到网上找了一些 ...

  2. 2022年Java面试总结,200多页真题笔记和详解(核心考点、6家大厂)

    为了进大厂,花了很多时间和精力在面试准备上,也刷了很多题.但题刷多了有点怀疑人生,不知道刷的这些题在之后的工作中能不能用到,如果只是为面试而刷题是不是在浪费人生呢? 如果你想进大厂,或者去一个更大.更 ...

  3. java获取request body_HttpServletRequest获取body内容(字符串/二进制)详解

    首页 > Java Web > SpringMvc应用 > HttpServletRequest HttpServletRequest获取body内容(字符串/二进制)详解 获取HT ...

  4. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  5. java一个方法排他调用_Java编程实现排他锁代码详解

    一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...

  6. 蓝桥杯java B组历年省赛真题汇总及题目详解

    蓝桥杯java B组历年省赛真题汇总及题目详解 2019年第十届蓝桥杯省赛真题详解 2018年第九届蓝桥杯省赛真题详解 2017年第八届蓝桥杯省赛真题详解 2016年第七届蓝桥杯省赛真题详解 2015 ...

  7. 【JAVA秘籍心法篇-Spring】Spring XML解析源码详解

    [JAVA秘籍心法篇-Spring]Spring XML解析源码详解 所谓天下武功,无坚不摧,唯快不破.但有又太极拳法以快制慢,以柔克刚.武功外式有拳打脚踢,刀剑棍棒,又有内功易筋经九阳神功.所有外功 ...

  8. java中北大学ppt总结+课后习题第二章(小宇特详解)

    java中北大学ppt总结+课后习题第二章(小宇特详解) 基本数据类型 Java语言有8种基本数据类型. 逻辑类型:boolean.1字节 整数类型: 1字节整数类型:byte. 2字节整数类型:sh ...

  9. java 判断图片否旋转,Java实现图片任意角度旋转

    Java普通方法实现图片旋转:import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import  ...

  10. java.exe 安装程序_java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格 ...

最新文章

  1. JavaScript tips and tricks - 4
  2. 程序的不同段的区别和作用
  3. 450g带盖吐司配方_食谱 | 直接法北海道吐司,一起get柔软的秘密!
  4. MapGIS干货|数据投影生成地质图的8个视频教程
  5. LIVE MINI ESP32开发板教程系列(四)NeoPixel + ws2812b实现炫彩显示
  6. 【越南风景梯田Win7主题】
  7. 如何将JavaScript中的JSON字符串转换为JSON对象数组?
  8. OFDM系统中的信号检测算法分类和详解
  9. 时尚圈美女撰文主攻方向
  10. 【Adobe】Photoshop :Mac 系统 Photoshop 软件更换许可指引
  11. Python串口通信发送浮点型数据
  12. java ews_如何验证EWS Java API
  13. 数组逆时针旋转 90 度
  14. 投放Google广告怎么做才是最合适的?谷歌广告的优势在哪
  15. YouTube Video Download
  16. 服务器装系统进pe界面就死机了,电脑可以进入PE系统,但重装就是重启,装不了系统是什么原因?...
  17. 北京自学考试计算机应用基础,北京教育考试院
  18. 《2008中国手机增值产品最值得投资期待50佳》
  19. 记录-《工厂青年》读后感
  20. 小白进阶之Scrapy安装.使用.爬取顶点小说信息

热门文章

  1. redis实现分布式锁代码片段
  2. MyBatis自学(5):延迟加载
  3. 11-----的使用
  4. Biopython SeqIO 读取序列文件,读取信息,写入序列
  5. Entity Framework6使用SQL Server Compact免安装部署
  6. 素数生成器的算法【PHP EDITION】
  7. python绘图坐标轴|刻度值|刻度||标题设置
  8. ArcMAP 设置图层透明度
  9. 水体专题提取与叶绿素a浓度反演
  10. 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?