如何在Android上创建渐进式JPEG图像

时间:2012-06-11 08:52:28

标签: java android jpeg

我需要通过Android手机的非常低带宽连接发送图像(低至10kByte / s),并希望以逐行(隔行扫描)模式发送图像,以便用户在另一端在漫长的转移过程中开始看到图像。现在,我正在使用常规照片应用创建图像:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

但这会创建非渐进式照片,但我无法发现如何说服它做其他事情。我探索的第二个选项(读取和重新压缩拍摄的图像)被挫败了,因为Bitmap的compress方法除了格式名称和压缩因子之外不允许任何编码参数:

bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);

我首选的解决方案是指示照片应用以渐进模式保存。

下一个最好的选择是Java算法,它将存储的jpeg无损地转换为渐进式(jpegtran在Linux上执行此操作,但它在C中并且依赖于libjepeg)。

下一个最好的方法是为android指定相关的编码参数,允许我重新压缩它,或者另外一个Java库来执行相同的操作。

进一步的研究表明,算法已经存在(/system/lib/libjpeg.so),~/android-sdk-linux/source-tree/external/jpeg中有来源 - 但似乎没有JNI包装器可供使用。

1 个答案:

答案 0 :(得分:1)

你看过这个文件吗?

http://docs.oracle.com/javase/6/docs/api/javax/imageio/plugins/jpeg/JPEGImageWriteParam.html

似乎有逐步支持。

或者,您可以使用例如OpenJPEG通过JNI。请参阅http://www.linux-mag.com/id/7697/作为开始。