Necesito enviar imágenes a través de muy conexión de bajo ancho de banda desde un teléfono Android (hasta 10kByte/s) y me gustaría enviarlos en modo progresivo (entrelazado) para que el usuario en el otro extremo empiece a ver la imagen durante la larga transferencia. En este momento, estoy creando la imagen con la aplicación de fotos regulares:Cómo crear una imagen JPEG progresiva en Android
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
pero esto crea no progresivas fotos y no he podido descubrir cómo convencer a hacer otra cosa. La segunda opción exploré (lectura y volver a comprimir la imagen tomada) quedó frustrado porque el método de compresión del mapa de bits no permite ningún parámetro de codificación, además de nombre de formato y el factor de compresión por lo que yo pude determinar:
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
Mi solución preferida sería instruir a la aplicación de fotos para que guarde en modo progresivo.
La siguiente mejor opción sería un algoritmo de Java que convierta sin pérdidas el jpeg almacenado a progresivo (jpegtran lo hace en Linux, pero está en C y se basa en libjepeg).
El siguiente mejor sería un método para especificar los parámetros de codificación relevantes para Android, lo que me permite volver a comprimirlo, o una biblioteca alternativa de Java que haga lo mismo.
La investigación adicional reveló que los algoritmos ya están allí (/system/lib/libjpeg.so
) con las fuentes en ~/android-sdk-linux/source-tree/external/jpeg
, pero parece que no hay envoltorios JNI disponibles.
Solo una nota: "progresivo" es exactamente lo que obtienes: de arriba a abajo. Lo que estás buscando se llama "entrelazado". El formato de salida JPEG no admite el entrelazado. PNG lo hace, por lo que debe considerar crear una imagen PNG entrelazada. –
@AleksG Lo siento, pero tengo que estar en desacuerdo. Consulte la sección [wikipedia] (https://en.wikipedia.org/wiki/JPEG) 'Compresión JPEG'. Como mencioné en la pregunta, este formato es fácil de crear en 'Linux' usando jpegtran. – Ivin