用java压缩二维图形写入图像大小

用java压缩二维图形写入图像大小,java,image,Java,Image,我有一个图像,使用java中的java.awt.Graphics2D我在图像上写了一个文本。在这里之前一切都很好。当我试图用java中的ImageWriteParam压缩这个图像时,图片被夸大了。下面是我用来压缩图像大小的代码。不过,这段代码对于普通图像效果很好 File input = new File("Input Image File"); BufferedImage image = ImageIO.read(input); File compressedImag

我有一个图像,使用java中的
java.awt.Graphics2D
我在图像上写了一个文本。在这里之前一切都很好。当我试图用java中的
ImageWriteParam
压缩这个图像时,图片被夸大了。下面是我用来压缩图像大小的代码。不过,这段代码对于普通图像效果很好

    File input = new File("Input Image File");
    BufferedImage image = ImageIO.read(input);

    File compressedImageFile = new File("Compressed image file location");
    OutputStream os = new FileOutputStream(compressedImageFile);

    Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
    ImageWriter writer = (ImageWriter) writers.next();

    ImageOutputStream ios = ImageIO.createImageOutputStream(os);
    writer.setOutput(ios);

    ImageWriteParam param = writer.getDefaultWriteParam();

    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    param.setCompressionQuality(1.0f);  // Change the quality value you prefer
    try {
        writer.write(null, new IIOImage(image, null, null), param);
        System.out.println(writer);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    os.close();
    ios.close();
    writer.dispose();
文件输入=新文件(“输入图像文件”);
BuffereImage image=ImageIO.read(输入);
File compressedImageFile=新文件(“压缩图像文件位置”);
OutputStream os=新文件OutputStream(compressedImageFile);
迭代器编写器=ImageIO.getImageWritersByFormatName(“jpg”);
ImageWriter writer=(ImageWriter)writers.next();
ImageOutputStream ios=ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam参数=writer.getDefaultWriteParam();
参数setCompressionMode(ImageWriteParam.MODE_显式);
参数设置压缩质量(1.0f);//更改您喜欢的质量值
试一试{
writer.write(null,新IIOImage(image,null,null),param);
System.out.println(writer);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
os.close();
ios.close();
writer.dispose();

感谢您的帮助。谢谢

使用默认的
ImageWriterParams
,使用
writer.getDefaultWriteParam()
。但正如在报告中提到的,它在这里说:

[…]默认实现构造并返回不允许平铺、渐进编码或压缩的新ImageWriteParam对象

还有一个关于如何处理这个问题的提示

单个插件可以返回启用了其他可选功能的ImageWriteParam实例,也可以返回ImageWriteParam插件特定子类的实例