WebP para Android

¿Hay ejemplos sobre cómo usar WebP para Android? Estoy tratando de obtener una lista de imágenes webp y mostrarlos en un listview con un imageview.

Sé theres un api del libwebp y lo he integrado en mi proyecto androide usando el NDK, pero cómo hago excatly el uso del api para tomar mi webp binario y demostrarlo en una visión de la imagen?

Cualquier ayuda sería increíble!

Utilice libwebp con NDK. Libwebp-0.1.3 ya viene con el archivo Android.mk (desactualizado y con errores de sintaxis, pero aún). También se generó enlaces JNI en /swig/ directorio.

Así es como lo hice funcionar:

  1. Descargue NDK, póngalo en el sistema PATH .
  2. Descargar libwebp-0.1.3.tar.gz, colocarlo en your_project_dir/jni
  3. Reemplace Android.mk con la siguiente.
  4. Cree jni/src/libwebp_java_wrap.c con el contenido de abajo.
  5. Crear jni/Application.mk , con el contenido de abajo.
  6. Ejecute ndk-build desde el directorio del proyecto. Esto genera archivos .so en /libs/ . Puede inspeccionarlos con nm -D libs/armeabi/libwebp.so . En la lista verá las funciones de la biblioteca nativa (como WebPDecodeRGB ) y sus contrapartes JNI (como Java_com_google_webp_libwebpJNI_WebPDecodeRGB )
  7. Agrega /jni/swig/libwebp.jar para crear la ruta de acceso de tu proyecto de Android
  8. Consulte a continuación, por ejemplo, cómo utilizarlo en código Java

Aquí está contenido para Android.mk . Cambiado de original: eliminado los bits de codificador como no necesito estos, agregó libwebp_java_wrap.c , cambiado include $(BUILD_STATIC_LIBRARY) para include $(BUILD_SHARED_LIBRARY) .

 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ src/dec/alpha.c \ src/dec/frame.c \ src/dec/idec.c \ src/dec/layer.c \ src/dec/quant.c \ src/dec/tree.c \ src/dec/vp8.c \ src/dec/webp.c \ src/dec/io.c \ src/dec/buffer.c \ src/dsp/yuv.c \ src/dsp/upsampling.c \ src/dsp/cpu.c \ src/dsp/dec.c \ src/dsp/dec_neon.c \ src/dsp/enc.c \ src/utils/bit_reader.c \ src/utils/bit_writer.c \ src/utils/thread.c \ src/libwebp_java_wrap.c \ LOCAL_CFLAGS := -Wall -DANDROID -DHAVE_MALLOC_H -DHAVE_PTHREAD -DWEBP_USE_THREAD \ -finline-functions -frename-registers -ffast-math \ -s -fomit-frame-pointer -Isrc/webp LOCAL_C_INCLUDES += $(LOCAL_PATH)/src LOCAL_MODULE:= webp include $(BUILD_SHARED_LIBRARY) 

El contenido de libwebp_java_wrap.c está aquí , es básicamente el mismo que está incluido en el archivo tar de libwebp, excepto los bits del codificador eliminados.

Contenido de Application.mk :

 # The ARMv7 is significanly faster due to the use of the hardware FPU APP_ABI := armeabi armeabi-v7a APP_PLATFORM := android-9 

A continuación, le indicamos cómo utilizarlo en código Java. Observe cómo convierte la matriz de bytes [] a la matriz de colores int [] – esto se romperá si se cambia la endianidad, ¿verdad? También observe cómo utiliza arreglos en lugar de enteros individuales para el ancho y la altura por lo que se pasan por referencia.

 static { System.loadLibrary("webp"); } private Bitmap webpToBitmap(byte[] encoded) { int[] width = new int[] { 0 }; int[] height = new int[] { 0 }; byte[] decoded = libwebp.WebPDecodeARGB(encoded, encoded.length, width, height); int[] pixels = new int[decoded.length / 4]; ByteBuffer.wrap(decoded).asIntBuffer().get(pixels); return Bitmap.createBitmap(pixels, width[0], height[0], Bitmap.Config.ARGB_8888); } 

WebP es compatible con Android 4.0+ , también conocido como API de nivel 14. Puede comprobar con android.os.Build.VERSION >= 14 .

Hemos escrito una librería de Android sólo para eso.

https://github.com/EverythingMe/webp-android

Webp-android es una biblioteca que usamos en EverythingMe desde que amamos webp. Lo usamos para ahorrar ancho de banda y reducir nuestros tamaños de APK.

Webp-android es una adaptación del decodificador webp de cromo, y una adición de un envoltorio JNI para usarlo fácilmente en su código java. También es fácil cargar imágenes webp de xml a un ImageView (con el WebpImageView incluido) así:

 <me.everything.webp.WebpImageView android:layout_width="wrap_content" android:layout_height="wrap_content" webp:webp_src="@drawable/your_webp_image" /> 

Google afirma que WebP está soportado a partir de Android 4.0 ( http://developer.android.com/guide/appendix/media-formats.html ), sin embargo, en nuestras propias pruebas las imágenes webp muestran como interrogantes azules en el navegador estándar y Chrome en Android 4.0 y 4.1. En Android 4.2 Las imágenes de WebP parecen estar bien en una vista web y en Google Chrome.

Actualmente no hay forma de mostrar una imagen webp en cualquier aplicación nativa en un dispositivo Android, incluido el navegador web. Tendrá que buscar en aplicaciones de terceros para mostrar estas imágenes.

De acuerdo con la lista de correo WebP, están trabajando en la incorporación de soporte WebP en el SDK de Android. No dijeron cuándo exactamente planean lanzar esto pero cuando lo hacen usted debe poder ahorrar bitmaps como formato de WebP así como JPEG y PNG.

EDIT: Android 4.0 aka Ice Cream Sandwich ahora viene con soporte nativo para el formato WebP. Puede ver los tipos de archivo compatibles en el sitio de desarrolladores de Android .

  • Errores del indexador de Eclipse al usar STL con Android NDK
  • Error de sincronización Gradle, NDK no configurado, descarga con SDK manager
  • Uso de Android Studio con Vuforia
  • iqengines demo app crashes
  • Android ioctl: permisos y uso de root
  • Uso de la STL con Android NDK C ++
  • JAVAH no puede encontrar clase (android ndk)
  • ¿Cómo obtener un punto de ruptura en código NDK nativo y depurar código nativo en Android Studio?
  • Android NDK y C + + STL
  • ¿Cómo habilito las compilaciones ARM NEON con Gradle?
  • Redireccionar stdout al logcat en Android NDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.