【发布时间】:2014-08-21 08:37:17
【问题描述】:
我编写了一个测试来查看 setCompressionQuality() 如何影响文件大小和质量。但是,创建的所有文件的大小都相同,这表明我可能做错了什么。我已经在网上查看了许多关于如何执行此操作的指南以及有关 stackoverflow 的其他问题,但我仍然无法发现我的错误。有任何想法吗。 SSCCE 下面。
背景:我为什么要使用 JPEG 来截屏!!?是的,我意识到 PNG 是这项工作的工具,但我正在尝试在通过低带宽链接运行的自定义内部远程桌面解决方案上实现“低质量”模式,只要质量真的无关紧要用户可以看到发生了什么。
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
public class ImageCompressionJpg {
public static void main(String[] args) throws AWTException, IOException {
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(new Rectangle(Toolkit
.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "jpg", new File("screen.standard.jpg"));
// JPEGs, different qualities 0 - 1
for (float quality = 0; quality <= 1; quality += 0.2) {
ImageWriter writer = (ImageWriter) ImageIO
.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
ImageOutputStream ios = ImageIO.createImageOutputStream(new File(
String.format("screen.%.1f.jpg", quality)));
writer.setOutput(ios);
writer.write(image);
}
}
}
【问题讨论】:
标签: java bufferedimage javax.imageio