/***功能:压缩图片变成小尺寸***
*参数1:oImage:原图;*
*参数2:maxWidth:小尺寸宽度;*
*参数3:maxHeight:小尺寸长度;*
*参数4:newImageName:小尺寸图片存放的路径和新名字;*
*参数5:fileType:小尺寸图片类型(png,gif,jpg...)***/
private void compressImage(File oImage, int maxWidth, int maxHeight, String newImageName, String fileType) {
BufferedImage srcImage = ImageIO.read(oImage);;
int srcWidth = srcImage.getWidth(null);
int srcHeight = srcImage.getHeight(null);
if(srcWidth <= maxWidth && srcHeight <= maxHeight){
saveImage(srcImage);
return;
}
Image scaledImage = srcImage.getScaledInstance(srcWidth, srcHeight, Image.SCALE_SMOOTH);
double ratio = Math.min((double) maxWidth / srcWidth, (double) maxHeight / srcHeight);
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
scaledImage = op.filter(srcImage, null);
saveImage((BufferedImage)scaledImage, fileType, new FileOutputStream(newImageName));// 存盘
}

/***功能:图片加文字水印***
*参数1:oImage:原图;*
*参数2:newImageName:加文字水印图片存放的路径和新名字;*
*参数3:fileType:加文字水印图片类型(png,gif,jpg...);
*参数4:waterText:文字水印的内容****/
private boolean pressText(File oImage, String newImageName, String fileType, String waterText) throws IOException{
BufferedImage originalImage = ImageIO.read(oImage);
int originalWidth = originalImage.getWidth(null);
int originalHeight = originalImage.getHeight(null);
if (originalWidth < 50 || originalHeight < 50){
return false;
}
if(waterText==null || waterText.trim().equals("")){
return false;
}
BufferedImage newImage = new BufferedImage(originalWidth, originalHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(originalImage, 0, 0, originalWidth, originalHeight, null);
g.setColor(Color.RED);
int fontSize = 13;
g.setFont(new Font("宋体", Font.PLAIN, fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
int len = InitServlet.WATER_TEXT.length();
if(InitServlet.IS_WATER_CENTER==0){
g.drawString(InitServlet.WATER_TEXT, originalWidth-len*fontSize/2-6,originalHeight-6);
}else{
g.drawString(InitServlet.WATER_TEXT, (originalWidth-(len*fontSize))/2, (originalHeight-fontSize)/2);
}
g.dispose();
ImageIO.write(newImage, fileType, new FileOutputStream(newImageName));// 存盘
return true;
}

/***功能:图片加logo图片水印***
*参数1:oImage:原图;*
*参数2:newImageName:加logo图片水印存放的路径和新名字;*
*参数3:fileType:加logo图片水印图片类型(png,gif,jpg...);
*参数4:logoPath:logo水印图片的存放路径****/
private boolean pressImage(File oImage, String newImageName, String fileType, String logoPath) throws IOException{
File waterMarkImage = new File(logoPath);
if (!waterMarkImage.exists()) {
return false;
}
BufferedImage originalImage = ImageIO.read(oImage);
BufferedImage watermarkImage = ImageIO.read(waterMarkImage);
int originalWidth = originalImage.getWidth(null);
int originalHeight = originalImage.getHeight(null);
int watermarkWidth = watermarkImage.getWidth(null);
int watermarkHeight = watermarkImage.getHeight(null);
if (originalWidth <= watermarkWidth || originalHeight <= watermarkHeight || originalWidth < 50 || originalHeight < 50) {
return false;
}
BufferedImage newImage = new BufferedImage(originalWidth, originalHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(originalImage, 0, 0, originalWidth, originalHeight, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
if(InitServlet.IS_WATER_CENTER==0){
g.drawImage(watermarkImage, originalWidth-watermarkWidth-10, originalHeight-watermarkHeight-10, watermarkWidth, watermarkHeight, null);
}else{
g.drawImage(watermarkImage, (originalWidth-watermarkWidth)/2, (originalHeight-watermarkHeight)/2, watermarkWidth, watermarkHeight, null);
}
g.dispose();
ImageIO.write(newImage, fileType, new FileOutputStream(newImageName));// 存盘
return true;
}

转载于:https://blog.51cto.com/zhoujh/1073834

用java处理图片(压缩成小尺寸;加文字和logo水印)相关推荐

  1. 使用java iTest实现PDF大文件压缩——将文件过大的图片PDF文件压缩成小一些的图片PDF文件

    一.需求 项目中需要将文件大小过大的PDF文件,压缩成小PDF文件.通过iText的API,可以实现此需求.在保证文件不失真的前提下,将PDF大文件压缩成小文件. 二.代码 import com.it ...

  2. 如何将大的视频文件压缩成小的视频文件?

    如何将大的视频文件压缩成小的视频文件?视频是我们在生活中不可或缺的一部分,随着制作视频的小伙伴越来越多,大家都想把制作好的视频上传到一些平台或传给别人,有时候我们会遇到视频内存过大的问题,今天我给大家 ...

  3. ASP.NET(C#)图片加文字、图片水印

    ASP.NET(C#)图片加文字.图片水印 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...

  4. Java 图片添加文字或者logo水印(附代码) | Java工具类

    目录 前言 环境依赖 代码 总结 前言 本文提供java工具类,给图片添加文字或者logo图片的水印效果. 环境依赖 工具库maven依赖添加 <dependency><groupI ...

  5. php生成图片水印,PHP生成图片加文字及图案水印办法

    工作中,各种语言都要会,但不是各种语言都记到脑子里,常常要查字典.查手册.以及百度 对于PHP生成图片加文字及图案水印这项技巧,好久没有用,又有些生疏了,现在来温故知新,加深记忆! 代码如下: //P ...

  6. 图片加文字(批量水印 批量水印大师)

    图片加文字(批量水印 批量水印大师) 批量水印大师是一款好用的批量添加水印软件.三步操作即可轻松完成. 第一步: 添加图片 - 选择需要添加水印的图片文件. 第二步:水印设置 - 设置水印效果,所见即 ...

  7. 压缩pdf大小的方法?怎样压缩pdf大小?pdf文档怎么压缩?pdf文件太大怎么压缩?pdf文件太大怎么压缩成小内存?如何降低pdf文件大小?怎么把pdf文件压缩到指定大小?压缩pdf的简单方法

    pdf在线压缩大小?在工作中需要处理大量PDF文件,我们通常要对PDF文件进行压缩处理.那么问题来了,PDF文件该怎么压缩呢?可能很多人都不知道具体的操作方法,今天要分享给大家的正是PDF压缩的方法, ...

  8. ASP.NET(C#)图片加文字、图片水印(转)

    一.图片上加文字: //using System.Drawing;    //using System.IO;    //using System.Drawing.Imaging;       pri ...

  9. FFMPEG 实现混音,加水印,加文字,模糊水印任意滤镜组合

    一共15种组合一下搞定:先伪代码没逻辑错误,然后就撸正式代码,后面测试就有点小顺利了 伪代码: 根据参数构造ffmpeg参数命令 构造元素视频方面有水印,文字,去水印:音频方面有混音一个 构造顺序: ...

最新文章

  1. wxPython的简单应用
  2. nodejs的web开发框架了解一下
  3. 二进制补码求值用c语言,C语言程序设计第2章数据类型.运算符与表达式.ppt
  4. HDU 1426 Sudoku Killer【DFS 数独】
  5. 深度优化LNMP之PHP
  6. Mongo 常用的server命令
  7. 25岁,欠债47万怎么办
  8. AI近义词替换工具.v.1.2
  9. 浅谈Anchor free与Anchor based
  10. 我在b站上推荐一个看小电影的网站,结果被骂了
  11. octobercms mysql_在Ubuntu 18.04/Debian 9上安装October CMS
  12. idou老师教你学istio2:监控能力介绍
  13. Docker安装最新版MySQL5.7(mysql-5.7.40)教程(参考Docker Hub)
  14. 启动Selenium报错:session not created……解决方案
  15. Win10录屏有哪些方法?快来了解一下录屏技巧
  16. matlab模糊优选理论模型,模糊优选神经网络BP模型
  17. pytorch网络知识点四_thop计算Parameter和FLOPs,__all__的作用, GFLOPs =? GMacs
  18. 研究GigE Vision(未完待续)
  19. 流量分析“Understanding Traffic Density from Large-Scale Web Camera Data”
  20. 迷宫算法之递归回溯python实现

热门文章

  1. 安装计算机的更新每次更新失败,win7电脑自动更新失败怎么办,电脑自动更新失败解决方法...
  2. linux mint 安装内核,使用Ukuu在Ubuntu/Linux Mint上安装Linux Kernel 5.0的方法
  3. html 分页 惰性加载,懒加载实现的分页网站footer自适应
  4. java怎样用类模板创建对象_java入门(十四) | 面向对象(OOP)之类和对象
  5. react 界面渲染完成 立即执行_React原理解析fiber、diff
  6. 用asp.net实现日历打卡_清单 | 2021年日历请查收
  7. 图像局部特征(一)--概述
  8. pdf怎么打开上次看到的地方_ppt如何转pdf?俩种方法轻松搞定
  9. opencv4 图像特征匹配_openCV - 图像特征匹配
  10. SQL—数据模型的组成要素