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?
- Una buena manera de identificar la sección de código en / proc / * / maps
- ¿Cómo evito que algunas funciones se despojen?
- Biblioteca no encontrada debido a targetSdkVersion (armeabi-v7a y libcryptopp.so)
- La librería NDK de Android no se carga en tiempo de ejecución para los teléfonos samsung galaxy 4.0.2
- Cómo obtener efecto de color mágico como escáner de cámara utilizando OpenCV
Cualquier ayuda sería increíble!
- Android NDK build, Método no se pudo resolver
- Ndk-build no logra construir la biblioteca de audio Superpowered después de la reciente actualización de NDK
- Biblioteca binaria preconfigurada nativa en Android Studio con el complemento experimental de Gradle
- ¿Diferencia entre bibliotecas estáticas y compartidas en el NDK de Android?
- Android NDK - soporte multlib con gradle
- Cómo eliminar soporte nativo de un proyecto de Android en eclipse porque eclipse está mostrando errores en jni?
- ¿Cómo aplicar el filtrado de video en android?
- Android Studio NDK Error de compilación Error: Error de ejecución de la tarea ': app: buildNative'
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:
- Descargue NDK, póngalo en el sistema
PATH
. - Descargar libwebp-0.1.3.tar.gz, colocarlo en
your_project_dir/jni
- Reemplace
Android.mk
con la siguiente. - Cree
jni/src/libwebp_java_wrap.c
con el contenido de abajo. - Crear
jni/Application.mk
, con el contenido de abajo. - Ejecute
ndk-build
desde el directorio del proyecto. Esto genera archivos.so
en/libs/
. Puede inspeccionarlos connm -D libs/armeabi/libwebp.so
. En la lista verá las funciones de la biblioteca nativa (comoWebPDecodeRGB
) y sus contrapartes JNI (comoJava_com_google_webp_libwebpJNI_WebPDecodeRGB
) - Agrega
/jni/swig/libwebp.jar
para crear la ruta de acceso de tu proyecto de Android - 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 .
- Administrar el diseño dentro de un radiogrupo horizontal orientado
- Cargar imágenes de la caché de disco con Picasso si está fuera de línea