图片添加水印和压缩

[Java]代码

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

}

}

}

java 图片加白压缩_java图片添加水印和压缩相关推荐

  1. JAVA实现图片加水印及Base64图片字符串加水印

    JAVA实现图片加水印及Base64图片字符串加水印 可将根据不同需求选择场景一,场景二来实现家水印操作,个人感觉比我上一遍文章<base64字符串加水印 >实在 场景一: 涉及上送过来的 ...

  2. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化...

    <?php /*[LocoySpider] (C)2005-2010 Lewell Inc.火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加水印 ...

  3. img标签图片加载失败显示图片

    img标签图片加载失败显示图片 onerror="οnerrοr=null;src='../../image/community/initialize_img.png'"

  4. java图片加文字水印_JAVA实现图片的修改,添加文字水印效果

    JAVA实现图片的修改,添加文字水印效果,根据文字内容生成图片,下面是具体的代码,以及测试方法: 实现类: package JavaMoImage; import javax.p_w_picpathi ...

  5. java 图片质量压缩_java图片高质量压缩

    /** * 根据宽高编辑图片 * * @param outPath *            输出文件路径 * @param width *            输出文件宽 * @param hei ...

  6. html圆形图片怎么加白边框,带图片,带文字,有白边框的这种图片怎么制作的?...

    这种"留白图文"可以用手机APP快速制作,用现成的文字模板,或者是自己加字,加图案都OK.比如:下面同样一张图片和文字,加上留白后,只需调整照片位置就能做出多种图文效果. 1.横版 ...

  7. java图片路径怎么设_java图片路径问题

    想写个带有背景图片的JFrame可是总是错,第一种用的是直接放置路径,可是不管用什么路径都是错,到现在还没弄好.然后用getClass.getResource();的方法才将图片加载进来.不过也终于弄 ...

  8. html2canvas给图片添加水印,小程序用Canvas给图片加水印,拼接图片,制作名片

    Canvas是微信小程序中的一个原生组件,因此我们在使用它的时候要特别注意微信小程序对原生组件的使用说明.canvas这个组件其实就是一个画布,你可以在上面画很多你用其他方式不好实现的内容.下面我就将 ...

  9. java图片加气泡文字,动态图片加气泡文字 微信动态图片加文字教程

    现在微信聊天少不了表情图片,这越有个性.独特的就越受大众喜爱,每每看到好看的图片时,大家也会忍不住收藏起来用.那你有没有想过自己P图呢?学一下PS图片创作一些独一无二的搞笑表情图,放在微信上秀秀吧,也 ...

最新文章

  1. 通过了OCP的全部考试后的感受(ZT)
  2. 马斯克脑机接口遭质疑:不是新技术,没体现神经解码进展
  3. photoshop中把图片颜色变成透明
  4. spark sql and hive 3g数据测试
  5. pca 主成分分析_超越普通PCA:非线性主成分分析
  6. qt更改类名_Qt编写自定义控件属性设计器
  7. [JavaWeb基础] 015.Struts2 表单验证框架
  8. 字节跳动副总裁喊话腾讯:停止无理由封杀飞书;Git服务器配置错误导致日产汽车源码泄露;Linux5.10.5 发布
  9. openid4java 使用记录[转载]
  10. Java关于数据结构的实现:散列
  11. 获取GridView控件总列数
  12. 分享丨李飞飞、吴恩达、Bengio等人的顶级深度学习课程------斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感
  13. 如何设置mysql数据库连接池的大小
  14. 老年人健康管理系统技术开发
  15. 2012云计算发展趋势
  16. kali之beef的使用
  17. happen-before原则
  18. 【夯实基础--CSS】=> 高级技巧(雪碧图/滑动门/CSS三角形/字体图标(iconfont)等)
  19. 删除子文件夹[字典树 + go变量 + strings.builder的copyCheck()]
  20. 上海高一计算机奥赛,上海物理奥赛金牌“大神”爱番剧和高达,已保送清华大学姚班...

热门文章

  1. ESP32学习之JSON,和接入心知天气
  2. java 三维向量类_三维向量类
  3. ubuntu 挂载局域网网盘目录
  4. 企业宣传片的拍摄要点!
  5. 各大内存数据库系统对比
  6. 【工具教程】CH340 USB转串口芯片驱动安装说明
  7. 如何自己制作一个路由器?
  8. 30万字,579页《面试小抄》
  9. 手把手介绍函数式编程:从命令式重构到函数式
  10. Arduino Pro Mini 基本用法