Java图像压缩

Java图像压缩,java,image-compression,Java,Image Compression,从我们的应用程序中,我们从第三方服务获取图像(jpeg/png),下载后我们希望将这些图像保存为压缩图像 有谁能指导一下如何用Java压缩图像吗?JPG和PNG图像已经被压缩了,所以还不完全清楚您的意图是什么。但是,一般来说,您可以使用ImageIO编写图像: ImageIO.write(image, "jpg", outputStream); (或类似地称为“png”)。默认情况下,这不允许您选择压缩级别(即文件大小和图像质量之间的权衡)。为了使用不同于默认压缩的格式编写JPG文件,可以使用

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


有谁能指导一下如何用Java压缩图像吗?

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();
}
publicstaticvoidwritejpg(
BuffereImage BuffereImage,
OutputStream OutputStream,
浮动质量)引发异常
{
迭代器迭代器=
getImageWritersByFormatName(“jpg”);
ImageWriter ImageWriter=iterator.next();
ImageWriteParam ImageWriteParam=imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(imageWriteParam.MODE_显式);
设置压缩质量(质量);
ImageOutputStream ImageOutputStream=
新的MemoryCacheMageOutputStream(outputStream);
设置输出(imageOutputStream);
IIOImage IIOImage=新IIOImage(buffereImage,null,null);
imageWriter.write(空,iioimage,imageWriteParam);
imageOutputStream.flush();
}

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();
}
publicstaticvoidwritejpg(
BuffereImage BuffereImage,
OutputStream OutputStream,
浮动质量)引发异常
{
迭代器迭代器=
getImageWritersByFormatName(“jpg”);
ImageWriter ImageWriter=iterator.next();
ImageWriteParam ImageWriteParam=imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(imageWriteParam.MODE_显式);
设置压缩质量(质量);
ImageOutputStream ImageOutputStream=
新的MemoryCacheMageOutputStream(outputStream);
设置输出(imageOutputStream);
IIOImage IIOImage=新IIOImage(buffereImage,null,null);
imageWriter.write(空,iioimage,imageWriteParam);
imageOutputStream.flush();
}

JPEG和PNG图像被压缩。我想你需要看看图像切片。Photoshop有这个功能,它使图像加载速度更快。请检查切片技术,看看这是否能帮助你。JPEG和PNG图像被压缩。我想你需要看看图像切片。Photoshop有这个功能,它使图像加载速度更快。请检查切片技术,看看它是否能帮助你。你好,Marco13,谢谢你的回复。让我详细说明一下。我们正在构建一个realstats应用程序,有很多属性,每个属性都有10到30.jpeg图像。选择特性后,将显示其相应的图像。有没有办法压缩/缩小图像大小以快速加载?如果您需要更多详细信息,请告诉我压缩通常仅与加载图像所需的时间间接相关。压缩图像的加载速度可能更快(因为从硬盘读取的数据更少),但这必须通过基准测试进行验证(尽管我怀疑是否有可能合理地验证这一点)。关于可能的优化(如缓存或在后台线程中预加载图像)的一般提示超出了本文的范围。您好,Marco13,谢谢您的回复。让我详细说明一下。我们正在构建一个realstats应用程序,有很多属性,每个属性都有10到30.jpeg图像。选择特性后,将显示其相应的图像。有没有办法压缩/缩小图像大小以快速加载?如果您需要更多详细信息,请告诉我压缩通常仅与加载图像所需的时间间接相关。压缩图像的加载速度可能更快(因为从硬盘读取的数据更少),但这必须通过基准测试进行验证(尽管我怀疑是否有可能合理地验证这一点)。关于可能的优化(如缓存或在后台线程中预加载图像)的一般提示超出了本评论的范围。