gpt4 book ai didi

java - 如何让 libjpeg-turbo 的 java 包装器真正压缩?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:05 27 4
gpt4 key购买 nike

我无法在我的 Java 项目中获取 libjpeg-turbo 来实际压缩图像。它写了一个 .jpg 很好 - 但结果的最终大小总是例如几乎与同一图像的 24 位 windows .bmp 相同。一张 480x854 的图片用下面的代码片段变成一个 1.2 MB 的 jpeg。如果我使用 GRAY 采样,它是 800Kb(这些并不是最开始的花哨图像 - 大多数是中性背景,上面有一些我正在开发的游戏的填充原色圆盘)。

这是我目前得到的代码:

// for some byte[] src in RGB888 format, representing an image of dimensions// 'width' and 'height'try{    TJCompressor tjc = new TJCompressor(            src,            width            0,  // "pitch" - scanline size            height            TJ.PF_RGB  // format    );    tjc.setJPEGQuality(75);    tjc.setSubsamp(TJ.SAMP_420);    byte[] jpg_data = tjc.compress(0);    new java.io.FileOutputStream(new java.io.File("/tmp/dump.jpg")).write(jpg_data, 0, jpg_data.length);}catch(Exception e){    e.printStackTrace(System.err);}

我特别难以找到该项目的示例 Java 使用文档;它主要假定 C 背景/用法。我不明白传递给压缩的标志(我也不真正了解 jpeg 标准的内部结构,我也不想:)!

谢谢!

最佳答案

呸!在发布问题后的 5 分钟内,我就得到了答案。

结果的 hexdump 显示这些图像的文件末尾只有很多很多 0。

对于将来遇到类似情况的任何人,请在调用 TJCompressor.compress() 后立即使用 TJCompressor.getCompressedSize(),而不是使用 jpg_data.length(由于某种原因显然太大)。

最终结果变为:

// for some byte[] src in RGB format, representing an image of dimensions// 'width' and 'height'try{    TJCompressor tjc = new TJCompressor(            src,            width            0,  // "pitch" - scanline size            height            TJ.PF_RGB  // format    );    tjc.setJPEGQuality(75);    tjc.setSubsamp(TJ.SAMP_420);    byte[] jpg_data = tjc.compress(0);    int actual_size = tjc.getCompressedSize();    new java.io.FileOutputStream(new java.io.File("/tmp/dump.jpg")).            write(jpg_data, 0, actual_size);}catch(Exception e){    e.printStackTrace(System.err);}

关于java - 如何让 libjpeg-turbo 的 java 包装器真正压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com