如何在Java中压缩jpeg图像而不丢失该图像中的任何元数据?

gui*_*oet 7 java compression jpeg image-processing

我想使用Java压缩jpeg文件.我是这样做的:

  1. 读取图像为 BufferedImage
  2. 使用压缩率将图像写入另一个文件.

好吧,这看起来很简单,但我发现ICC颜色配置文件和EXIF信息在新文件中消失了,图像的DPI从240降到72.它看起来与原始图像不同.我在OS X中使用像预览这样的工具.它可以完美地改变图像的质量而不会影响其他信息.

我可以用Java完成吗?至少保留ICC颜色配置文件并让图像颜色看起来与原始照片相同?

小智 0

/**
 * @param inputFilenameWithPath : binary filepath
 * @param outputFilepath        : output image path
 * @param start                 : from where the image start in binary file
 * @param len                   : length of the image
 * @throws ImageAccessException
 */
public void extractImageFromBinaryFile(String inputFilenameWithPath, String outputFilepath, int start, int len) throws ImageAccessException
{
    try
    {
        File file = new File(inputFilenameWithPath);
        FileImageInputStream iis = new FileImageInputStream(file);

        // Added
        byte[] b = new byte[start];
        iis.read(b, 0, start);

        byte[] fb = new byte[]{};
        iis.read(fb);

        IIOByteBuffer iiob = new IIOByteBuffer(fb, start, len);
        iis.readBytes(iiob, len);

        OutputStream os = new FileOutputStream(outputFilepath);
        os.write(iiob.getData());
        iis.close();
        os.close();

    }
    catch (IOException ioe)
    {`enter code here`
        throw new ImageAccessException("Image File read/write error");
    }
}
Run Code Online (Sandbox Code Playgroud)