【问题标题】:Reduce JPEG image size without scale its width/height by Java在不通过 Java 缩放其宽度/高度的情况下减小 JPEG 图像大小
【发布时间】:2012-03-23 06:07:29
【问题描述】:

我想通过 Java 减小一个 jpeg 图像大小(3M 减小到 1M),没有缩放(图像高度和宽度没有变化)。在此站点中,我找不到解决方案。以下是我尝试过的:

1 使用 ImageIO:

BufferedImage image  = ImageIO.read(inputFile);

ImageWriter writer = null;
Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
if(iter.hasNext()){
    writer = (ImageWriter) iter.next();
}

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

ImageWriteParam iwParam = writer.getDefaultWriteParam();
iwParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwParam.setCompressionQuality(compressionQuality);
writer.write(null, new IIOImage(image, null, null ), iwParam);

对于解决方案 1,我为 jpg 设置了 compressionQuality,但我无法获得原始图像 compressQuality,并且有时我得到的 newImage 比原始图像大。

【问题讨论】:

    标签: java image javax.imageio reduce jai


    【解决方案1】:

    使用的压缩质量不与 JPEG 图像一起存储。

    如果您需要低于某个阈值,则必须尝试多次,同时每次降低压缩质量,直到达到限制。请注意,非常低的设置会产生糟糕的图像。

    我不熟悉 MODE_EXPLICIT 标志。它也可能是一个可调参数。

    【讨论】:

    【解决方案2】:

    我找到了用于降低质量的following 代码示例。

    重要的部分只是设置 iwp.setCompressionQuality。希望这会有所帮助。

    BufferedImage bi = null;
    
    bi = ImageIO.read(new File("image.jpg"));
    
    Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
    ImageWriter writer = (ImageWriter) iter.next();
    
    ImageWriteParam iwp = writer.getDefaultWriteParam();
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    
    // reduced quality.
    iwp.setCompressionQuality(0.1f);
    
    File file = new File("c:/image_low.jpg");
    
    FileImageOutputStream output = null;
    
    output = new FileImageOutputStream(file);
    
    writer.setOutput(output);
    
    IIOImage image = new IIOImage(bi, null, null);
    writer.write(null, image, iwp);
    
    writer.dispose();
    

    【讨论】:

    • 这和我上面发的一样。设置 CompressionQuality =0.1 会实现最高压缩但会降低太多质量。我从 coderanch.com/t/383601/java/java/decrease-size-jpeg-image-file 找到了另一个解决方案,但我不喜欢它是如何工作的还没有。
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2018-05-05
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多