java setquality_Java-在不损失质量的情况下调整图像大小
给定您的输入图像,注释中第一个链接的答案中的方法(对Chris Campbell表示敬意)将产生以下缩略图之一:
(另一个是您使用MS Paint创建的缩略图。很难称其中一个比另一个“更好” ...)
编辑:只是要指出这一点:原始代码的主要问题是您并没有真正按比例缩放图像。 您只是使用了一个奇怪的循环来“计算”目标大小。 关键是您实际上要分多个步骤执行缩放。
为了完整起见,MVCE
(编辑:我提到了Chris Campbell,并通过注释引用了源代码,但在此要更清楚:以下内容基于《 Perils of Image.getScaledInstance()》)
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
public class ResizeQuality
{
public static void main(String[] args) throws IOException
{
BufferedImage image = ImageIO.read(new File("X0aPT.jpg"));
BufferedImage scaled = getScaledInstance(
image, 51, 75, RenderingHints.VALUE_INTERPOLATION_BILINEAR, true);
writeJPG(scaled, new FileOutputStream("X0aPT_tn.jpg"), 0.85f);
}
public static BufferedImage getScaledInstance(
BufferedImage img, int targetWidth,
int targetHeight, Object hint,
boolean higherQuality)
{
int type =
(img.getTransparency() == Transparency.OPAQUE)
? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
BufferedImage ret = (BufferedImage) img;
int w, h;
if (higherQuality)
{
// Use multi-step technique: start with original size, then
// scale down in multiple passes with drawImage()
// until the target size is reached
w = img.getWidth();
h = img.getHeight();
}
else
{
// Use one-step technique: scale directly from original
// size to target size with a single drawImage() call
w = targetWidth;
h = targetHeight;
}
do
{
if (higherQuality && w > targetWidth)
{
w /= 2;
if (w < targetWidth)
{
w = targetWidth;
}
}
if (higherQuality && h > targetHeight)
{
h /= 2;
if (h < targetHeight)
{
h = targetHeight;
}
}
BufferedImage tmp = new BufferedImage(w, h, type);
Graphics2D g2 = tmp.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g2.drawImage(ret, 0, 0, w, h, null);
g2.dispose();
ret = tmp;
} while (w != targetWidth || h != targetHeight);
return ret;
}
public static void writeJPG(
BufferedImage bufferedImage,
OutputStream outputStream,
float quality) throws IOException
{
Iterator iterator =
ImageIO.getImageWritersByFormatName("jpg");
ImageWriter imageWriter = iterator.next();
ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
imageWriteParam.setCompressionQuality(quality);
ImageOutputStream imageOutputStream =
new MemoryCacheImageOutputStream(outputStream);
imageWriter.setOutput(imageOutputStream);
IIOImage iioimage = new IIOImage(bufferedImage, null, null);
imageWriter.write(null, iioimage, imageWriteParam);
imageOutputStream.flush();
}
}
java setquality_Java-在不损失质量的情况下调整图像大小相关推荐
- java为什么删除jpg删不掉_java-如何在不损失质量的情况下从图像(JPG)删除元数据?...
我已经在Stackoverflow上发现了这个几乎相似的问题: 但是,当我使用上述方法时,保存的图像将被压缩.有什么办法可以在不压缩图像的情况下删除元数据?我的Java程序中可以使用任何库吗? 解决方 ...
- ITK:在没有写访问权的情况下迭代图像中的区域
ITK:在没有写访问权的情况下迭代图像中的区域 内容提要 输出结果 输入 输出 C++实现代码 内容提要 遍历图像的某个区域(无写访问权限). 输出结果 输入 输出 255 255 255 255 2 ...
- html 图片放大保证不失真,教你如何在保证图片不失真的情况下缩小图片大小
教你如何在保证图片不失真的情况下缩小图片大小 随着卡片机.单反的普及,越来越多的人有能力购买和拥有一台属于自己的相机,并随时随地拍摄下喜欢的风景.人物,记录身边美好的一切.照片拍下后,大部分人喜欢放到 ...
- java6打印机不能用_高分求解:java中调用的打印机在什么情况下不可用?
java文档中说PrinterJob类中的getPrinterJob()方法无论返回的打印机是否可用都不会返回一个null值.我查阅过一些文献有介绍说可以用getPrintService()方法测试返 ...
- 一个数字可以在不损失精度的情况下达到的JavaScript的最高整数值是多少?
这是由语言定义的吗? 是否有定义的最大值? 在不同的浏览器中是否有所不同? #1楼 您要用于按位运算的任何值都必须在0x80000000(-2147483648或-2 ^ 31)和0x7fffffff ...
- java流处理为什么快_“任何情况下,都不可以堕胎”是道德普遍主义的观点。
[判断题]两个可能性之间可以彼此独立. [多选题]全球化正改变着我们的工作方式和生活方式,原因是我们首先必须处理( )和( )这两个问题. [判断题]"只许州官放火"体现了双重标准 ...
- java image 设置大小_如何使用Java调整图像大小?
Thumbnailator是一个用于Java的开源图像大小调整库,具有流畅的界面,在MIT许可下分发. 我编写这个库是因为在Java中制作高质量的缩略图可能会非常困难,而且生成的代码可能非常混乱.使用 ...
- java处理图像减小大小不改变像素_在Java中调整图像大小以降低内存消耗
ImageMagick的"转换"命令行工具使您可以在执行操作时指定内存使用限制. 我想找到一个提供相同选项的Java图像大小调整库. 我的应用程序有时会获得非常大的JPEG,因此需 ...
- 在线gif压缩文件大小_如何在不损失图像质量的情况下压缩动画GIF文件
在线gif压缩文件大小 动画GIF比任何其他数字图像格式都已根深蒂固于在线文化中. JPEG或多或少是传统摄影的延续,但GIF是新的且功能强大. 在过去的十年中,广泛的宽带已导致视频流传输,但是在此之 ...
最新文章
- Redhat 5 无法安装elfutils-libelf-devel-0.137问题
- 【WP8.1开发】RenderTargetBitmap类的特殊用途
- MapReduce-流量统计求和-排序-Mapper和Reducer编写
- 2020巨量引擎用户旅游全周期行为动机调研报告
- 在a标签中写ajax,ajax请求后的数据渲染到页面中,a链接失效
- java IO包装流如何关闭
- MSN登陆以后没有响应处理方法
- 使用py2app打包项目 通用与各个平台
- Win10安装ST-Link驱动--无需下载驱动
- 车辆信息管理系统(C语言大作业)
- 对计算机专业学科的认识1000字,计算机专业1000字实习报告
- 一封学生来信:突破大学的迷茫
- cannot enlist more than one non-XA resource
- OPENGLES 绘制纹理带黑圈pre-multiplying
- Python爬虫,30秒爬取500+篇微信文章!太强啦!
- 开发板和电脑网线连接,电脑网线连接 ubuntu18.04 nfs搭建
- python青少年编程_机器人Python青少年编程开发实例
- python3or5的值_详解python中and和or的返回值
- 【前端】相对定位实现十字居中(上下左右居中)
- python量化交易:筹码分布(1)