2014-04-02 185 views
0

从我们的应用程序中,我们从第三方服务获取图像(jpeg/png),下载后我们要将这些图像保存为压缩图像。Java图像压缩

任何人都可以请指导如何压缩Java中的图像?

+2

JPEG和PNG图像* *被压缩。 – Boann

+0

我认为你需要看图像切片。 Photoshop有这个,它使图像加载速度更快。请检查切片技术,看看是否可以帮助你。 – Soley

回答

4

JPG和PNG图像已经压缩,所以它不完全清楚你的意图是什么。然而,在一般情况下,你可以写ImageIO图片:

ImageIO.write(image, "jpg", outputStream); 

(或"png",类似)。默认情况下,这不允许您选择压缩级别(即文件大小和图像质量之间的折衷)。为了编写具有比默认压缩不同的JPG文件,你可以使用一个实用的方法是这样的:

public static void writeJPG(
    BufferedImage bufferedImage, 
    OutputStream outputStream, 
    float quality) throws IOException 
{ 
    Iterator<ImageWriter> 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(); 
} 
+0

嗨Marco13,谢谢你的回复。让我详细说明一下。我们正在构建一个realstats应用程序,有很多属性,每个属性都有10到30个.jpeg图像。当选择一个属性时,会显示相应的图像。有什么办法来压缩/缩小图像的大小加载速度?让我知道你是否想要更多细节 –

+0

压缩通常只是间接地与*加载*图像所需的时间相关。压缩映像可能加载速度更快(因为需要从硬盘读取更少的数据),但这必须通过基准进行验证(尽管我怀疑可能会明智地验证此操作)。可能优化的一般提示(如在后台线程中缓存或预加载图像)超出了本评论的范围。 – Marco13