Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法使用ImageIO进行JPEG压缩_Java_Bufferedimage_Javax.imageio - Fatal编程技术网

Java Can';无法使用ImageIO进行JPEG压缩

Java Can';无法使用ImageIO进行JPEG压缩,java,bufferedimage,javax.imageio,Java,Bufferedimage,Javax.imageio,我编写了一个测试来查看setCompressionQuality()如何影响文件大小和质量。但是,创建的所有文件大小都相同,这表明我可能做错了什么。我在网上看了很多关于如何做这件事的指南,还有关于stackoverflow的其他问题,但我仍然没有发现我的错误。任何想法。下面是SSCCE 背景:为什么我要用JPEG截图!!?是的,我意识到PNG是完成这项工作的工具,但我正试图在一个自定义的内部远程桌面解决方案上实现一种“低质量”模式,该解决方案通过低带宽链接运行,只要用户能够看到正在发生的事情,质

我编写了一个测试来查看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);
        }
    }
}
import java.awt.AWTException;
导入java.awt.Rectangle;
导入java.awt.Robot;
导入java.awt.Toolkit;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.imageio.ImageWriteParam;
导入javax.imageio.ImageWriter;
导入javax.imageio.stream.ImageOutputStream;
公共类ImageCompressionJpg{
公共静态void main(字符串[]args)引发AWTException、IOException{
机器人=新机器人();
BuffereImage image=robot.createScreenCapture(新矩形(工具箱
.getDefaultToolkit().getScreenSize());
write(图像,“jpg”,新文件(“screen.standard.jpg”);
//JPEG,不同质量0-1

对于(float quality=0;quality将ImageParams传递到ImageWriter

writer.write(null, new IIOImage(image, null, null), param);

您必须使用不同的
write()
重载并向其传递
IIOImage
和自定义参数:

ImageWriter writer  = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();

param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);

writer.setOutput(new FileImageOutputStream(
    new File(String.format("screen.%.1f.jpg", quality))));
writer.write(null, new IIOImage(image, null, null), param);
writer.dispose();