一、用Thumbnails工具类实现
二、文件流实现
图片尺寸不变,质量改变
public static File resize(Float quality, File file, Image targetImage) throws ImageFormatException, IOException {
int newWidth = targetImage.getWidth(null);
int newHeight = targetImage.getHeight(null);
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;
// 指定写图片的方式为 jpg
imgWrier = ImageIO.getImageWritersByFormatName("png").next();
imgWriteParams = new JPEGImageWriteParam(null);
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float)0.5);
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel = ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel
.createCompatibleSampleModel(16, 16)));
BufferedImage image = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
image = g2d.getDeviceConfiguration().createCompatibleImage(newWidth,newHeight,Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
Image from = targetImage.getScaledInstance(newWidth, newHeight, targetImage.SCALE_AREA_AVERAGING);
g2d.drawImage(from, 0, 0, null);
g2d.dispose();
System.out.println("原图片大小=================="+file.length());
System.out.println("原图片路径=================="+file.getCanonicalPath());
FileOutputStream out = new FileOutputStream(file);
imgWrier.reset();
// 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
// 调用write方法,就可以向输入流写图片
imgWrier.write(null, new IIOImage(image, null, null), imgWriteParams);
out.flush();
out.close();
System.out.println("新图片大小=================="+file.length());
return file;
}
大小改变,质量不变
public static File resize20180224(Float quality, File file, Image targetImage) throws ImageFormatException, IOException {
int targetWidth = targetImage.getWidth(null);
int targetHeight = targetImage.getHeight(null);
int width = Math.max(targetWidth, 1);
int height = Math.max(targetHeight, 1);
double rate=2.0;
/* if(file.length()>=1024000){
rate= file.length()/(double)1024000;
}*/
int newWidth = (int) (((double) width) / rate);
int newHeight = (int) (((double) height) / rate);
BufferedImage image = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
image = g2d.getDeviceConfiguration().createCompatibleImage(newWidth,newHeight,Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
Image from = targetImage.getScaledInstance(newWidth, newHeight, targetImage.SCALE_AREA_AVERAGING);
g2d.drawImage(from, 0, 0, null);
g2d.dispose();
/** 设置图片压缩比例 */
if (quality == null || quality <= 0) {
if(file.length()<2049000){
//0.5倍压缩
quality = (Float)0.5f;//小于2MB
}else{
//0.25倍压缩
quality = (Float)0.25f;//大于2MB
}
}
System.out.println("原图片大小=================="+file.length());
ImageIO.write(image, "png", file);
System.out.println("新图片大小=================="+file.length());
return file;
}
分享到:
相关推荐
彻底解决Markdown图片问题——无需上传图片——无需网络——转发给他人图片无缺失
本文将详细探讨`flying-saucer-pdf`如何解决图片问题以及中文显示问题。 首先,让我们关注一下图片问题。在HTML到PDF的转换过程中,图片的处理是个常见挑战。`flying-saucer-pdf` 支持多种图片格式,如JPEG、PNG、...
将markdown格式的图片标签转换为html格式,解决CSDN博客无法导入图片的问题 --------------------------------------------- 使用方法(见压缩包内的 README.md 文件): 1. 将需要转换的文件放到 input 文件夹中 2...
### 解决Outlook邮件无法显示图片问题 #### 一、问题背景 在使用Outlook时,用户可能会遇到邮件中的图片无法正常显示的情况。通常,这些无法显示的图片会被标记为一个小红叉,而图片本身则作为附件存在。本文将...
直接放在项目中使用 添加好文件后 在mainfests中声明一下就可以了
在"完整版KindEditor修正上传图片问题"这个主题中,我们将探讨如何解决KindEditor在处理图片上传时可能遇到的问题,以及如何配置和定制编辑器以适应不同的后台环境。 首先,KindEditor提供了一个`demo`文件夹,其中...
解决 J2SE 中导出 Jar 文件不能显示图片问题 在 J2SE 中,导出 Jar 文件时经常遇到的问题是图片不能正常显示。本文将总结解决此类问题的方法,包括通过使用外部资源文件的方式和内部资源文件的方式解决问题。 一、...
Python动态分配算法解决压缩图片问题 Python动态分配算法解决压缩图片问题 Python动态分配算法解决压缩图片问题 Python动态分配算法解决压缩图片问题 Python动态分配算法解决压缩图片问题 Python动态分配算法解决...
1、UEditor 百度富文本编辑器完整版 .Net实例 已解决上传图片问题。 2、内附完整demo实例,附带txt讲解说明及UEditor常见问题解决方案。 3、已经调试好的百度文本编辑器实例,用户体验不错,具备很多人性化的功能,...
解决Windows7查看器打不开GIF图片问题.pdf
双击合并注册表即可解决ie浏览器不显示png图片问题。网上有很多方法都不管用,这个是我从注册表中导出的文件,这个绝对管用。
在IE6浏览器中,PNG图片经常会出现透明度问题,这是由于该浏览器的PNG透明支持存在缺陷。PNG(Portable Network Graphics)格式是一种支持半透明和全透明的图像文件格式,但在Internet Explorer 6(简称IE6)这个较...
"读取出错图片.txt"文件是结果输出,它列出了所有在检测过程中出现问题的图片,这对于排查和修复图片问题非常有帮助。用户可以通过查看这个文本文件,了解到哪些图片存在错误,并采取相应的措施,比如重新下载图片、...
标题中的"IIS无法显示中文名称图片问题的解决方法"指的是在使用Internet Information Services (IIS)作为Web服务器时,遇到的一个常见问题,即当图片文件名包含中文字符时,IIS无法正常显示这些图片。这个问题可能会...
对于在canvas上使用drawImage方法绘制图片时出现的不完全显示问题,本文将提供相应的解决方案。首先需要了解drawImage方法,这是canvas用于向画布上绘制图像的API。在微信小程序中,drawImage方法在使用时可能会因为...
在Laravel框架中,图片...以上就是针对Laravel框架中如何解决前端显示图片问题的知识点分享。希望能够对从事Laravel开发的工程师提供有价值的参考,帮助他们在实际项目中更加顺畅地处理类似的文件路径和资源访问问题。
总的来说,`LazyList`是解决Android ListView加载网络图片问题的有效方案,通过延迟加载、内存和磁盘缓存以及性能优化,使得在有限的内存资源下,能流畅地显示大量图片。在实际开发中,结合其他高效的图片加载库,如...
Vue CLI 使用绝对路径引用图片问题的解决 Vue CLI 是一个基于 Vue.js 的前端构建工具,它提供了一个强大的项目模板来帮助开发者快速构建 Vue 应用程序,但是在使用 Vue CLI 时,开发者可能会遇到一些问题,例如如何...
在IT行业中,尤其是在移动应用开发领域,iOS是一个重要的操作系统平台。本文将主要围绕iOS开发中的图像处理技术展开,...在实际项目中,遇到图片问题时,可以通过蓝湖等工具进行排查和优化,确保应用的稳定性和流畅性。