How to create a progressive JPEG image on Android

I need to send images over a very low-bandwidth connection from an android phone (down to 10kByte/s) and would like to send them in progressive (interlaced) mode so that the user at the other end starts seeing the image already during the lengthy transfer. Right now, I am creating the image with the regular photo app:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

But this creates non-progressive photos and I have not been able to discover how to convince it to do otherwise. The second option I explored (reading and re-compressing the taken image) got foiled because the Bitmap's compress method does not allow any encoding parameters besides format name and compression factor as far as I could determine:

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

My preferred solution would be to instruct the photo app to save in progressive mode.

The next best option would be a Java algorithm that losslessly converts the stored jpeg to progressive (jpegtran does this on Linux, but it is in C and relies on libjepeg).

The next best would a method to specify the relevant encoding parameters to android allowing me to re-compress it, or an alternative Java library that does the same.

Further research revealed that the algorithms are already there (/system/lib/ with the sources in ~/android-sdk-linux/source-tree/external/jpeg -- but there do not seem to be JNI wrappers readily available.


Have you seen this document?

It seems to have write progressive support.

Alternatively, you could use e.g. OpenJPEG through JNI. See as a start.

Need Your Help

Node.js and send back data to all browser tabs

javascript node.js

I am using Node.js and it works well with only one window or tab. But I want to get returned data from Node.js in all open tabs of the user's browser.

Bypassing query string validation (XSS prevention) in ASP.NET

javascript security xss

I was performing a security assessment on a very old project that I'm assigned to, which uses ASP.NET WebForms. Basically, there were plenty of "Back" buttons placed around the site, which would re...