代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
图片添加水印和压缩
作者:
shanxi_liyong
/ 发布于
2015/11/12
/
952
package net.leebao.core.util; 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.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; /** * 图片水印 */ public class ImageUtil { /** * @param args */ public static void main(String[] args) { String srcImgPath = "E:/zhzq/1.png"; String iconPath = "E:/zhzq/2.jpg"; String targerPath = "E:/zhzq/4.png"; // 给图片添加水印 // ImageUtil.waterMarkImageByIcon("java水印图片", iconPath, srcImgPath, targerPath, 0, 0, 0, 0.5f); ImageUtil.waterMarkByText("java水印图片", srcImgPath, targerPath, 0, 0, 0, 0.5f); // 给图片添加水印,水印旋转-45 // } /** * 给图片添加水印、可设置水印图片旋转角度 * * @param iconPath * 水印图片路径 * @param srcImgPath * 源图片路径 * @param targerPath * 目标图片路径 * @param degree * 水印图片旋转角度 * @param width * 宽度(与左相比) * @param height * 高度(与顶相比) * @param clarity * 透明度(小于1的数)越接近0越透明 */ public static void waterMarkImageByIcon(String logoText, String iconPath, String srcImgPath, String targerPath, Integer degree, Integer width, Integer height, float clarity) { OutputStream os = null; try { Image srcImg = ImageIO.read(new File(srcImgPath)); System.out.println("width:" + srcImg.getWidth(null)); System.out.println("height:" + srcImg.getHeight(null)); 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 (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 = clarity; // 透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 表示水印图片的位置 // g.drawImage(img, width, height, null); g.drawImage(img, srcImg.getWidth(null) - img.getWidth(null), srcImg.getHeight(null) - img.getHeight(null), null); // g.drawString(logoText, srcImg.getWidth(null) - img.getWidth(null), srcImg.getHeight(null) - img.getHeight(null)); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); g.dispose(); 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 * 目标图片路径 * @param degree * 水印图片旋转角度 * @param width * 宽度(与左相比) * @param height * 高度(与顶相比) * @param clarity * 透明度(小于1的数)越接近0越透明 */ public static void waterMarkByText(String logoText, String srcImgPath, String targerPath, Integer degree, Integer width, Integer height, Float clarity) { // 主图片的路径 InputStream is = null; 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); } // 设置颜色 g.setColor(Color.red); // 设置 Font g.setFont(new Font("宋体", Font.BOLD, 30)); float alpha = clarity; g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) . g.drawString(logoText, width, height); g.dispose(); 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(); } } } /** * 图片缩放(图片等比例缩放为指定大小,空白部分以白色填充) * * @param srcPath * 源图片路径 * @param destPath * 缩放后图片路径 */ public static void zoomImage(String srcPath, String destPath, int destHeight, int destWidth) { try { BufferedImage srcBufferedImage = ImageIO.read(new File(srcPath)); int imgWidth = destWidth; int imgHeight = destHeight; int srcWidth = srcBufferedImage.getWidth(); int srcHeight = srcBufferedImage.getHeight(); if (srcHeight >= srcWidth) { imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth)); } else { imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight)); } BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = destBufferedImage.createGraphics(); graphics2D.setBackground(Color.WHITE); graphics2D.clearRect(0, 0, destWidth, destHeight); graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null); graphics2D.dispose(); ImageIO.write(destBufferedImage, "JPEG", new File(destPath)); } catch (IOException e) { e.printStackTrace(); } } }
试试其它关键字
添加水印
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
shanxi_liyong
贡献的其它代码
(
10
)
.
iOS索引搜索核心代码
.
词法分析器
.
循环创建目录
.
freemark实现,简单的替换
.
计算斐波那契数列
.
字符串切片,拼接字符串处理文本
.
图片添加水印和压缩
.
图片延迟加载
.
javaBean中根据方法名获取属性名
.
复制属性的值
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3