Picasso no puede decodificar algunas imágenes: skia decode devuelto false
Actualización: Parece que esta pregunta se reduce a que algunas imágenes se decodifican correctamente, mientras que otras no. Si convierto el JPEG
no funciona a png
s, funcionan. Ninguna de mis imágenes tomadas directamente como JPEG
desde un Nikon D5000
, un Panasonic Lumix
o un Sony Experia
teléfono puede ser decodificado.
Estoy utilizando Picasso
para rellenar un ListView
en mi aplicación para Android
. Estoy, sin embargo, corriendo en el error --- decoder->decode returned false
para las imágenes que voy a utilizar, pero funciona bien para otras imágenes que se ejecutan a través de la web. Por lo tanto, creo que tiene algo que ver con las imágenes, pero no estoy realmente seguro. El error surge en la biblioteca de Skia
que es utilizada por Picasso
(hasta donde yo sé).
- BitmapFactory.decodeStream devuelve siempre null y decodificador skia muestra decodificar devuelto falso
- ¿Cómo encajan las piezas de la tubería de dibujo de Canvas de Android (2D)?
- Skia y Android Pintar objetos de dibujo y su uso o documentación
- Native Crash en Android 4.3 al llamar a Picture.writeToStream ()
- Decodificador Skia no puede descodificar el flujo remoto
Por ejemplo, esta imagen funciona bien, mientras que esto no lo hace, y es la última que tengo que trabajar. Todas las otras imágenes que necesito usar son tomadas con la misma cámara y editadas por Gimp
de la misma manera, resultando en imágenes como la primera, pero ninguna de ellas funciona. Por lo tanto, sospecho que tiene algo que ver con las imágenes en lugar de con el decodificador.
Algunas preguntas que aparecen:
- ¿Es posible que los metadatos puedan hacer algo en este proceso? Los metadatos son similares en todas las imágenes.
- ¿Podría ser algo con las imágenes codificadas que hace que el codificador se vuelva loco? Si es así, ¿qué podría ser y cómo puedo investigarlo? ¿Falta el final del archivo o algo?
- ¿Es posible habilitar más depuración y salida de
Picasso
oSkia
? ¿Trazas de la pila, por ejemplo? - ¿Los personajes no-UTF8 ensuciarán las cosas, o se manejará correctamente? La imagen de ejemplo no tiene caracteres UTF8 en ella, pero algunas de las imágenes pueden tener.
Lo que he intentado:
- Intenté abrir una imagen que no funciona en
Inkscape
y exportarla como un archivopng
lugar. Ahora, la imagen realmente funciona, por lo que parece haber algo con la codificaciónJPEG
. - Otro intento fue abrir la imagen en
Gimp
y exportar aJPEG
nuevo, pero eso no ayudó. - También intenté abrir la imagen en
Shotwell
y volver a exportar aJPEG
, con y sin los metadatos, pero ninguna de estas imágenes funcionan. Exportación apng
funciona como con la exportación apng
deInkscape
. - Todas las imágenes que no funcionan se toman con una cámara
Nikon D5000
, así que intenté tomar algunas imágenes con un teléfonoSony Experia
y una cámaraPanasonic Lumix
. LosJPEG
funcionan directamente, pero si se convierten aPNG
, todos ellos se decodifican. - He intentado configurar un objeto
Picasso.Builder
como se muestra aquí , para obtener un seguimiento de la pila. He pegado el rastro de la pila abajo. Puede parecer que en realidad esAndroid.BitmapFactory.decodeStream()
que falla, ya que el rastreo de la pila señalacom.squareup.picasso.BitmapHunter.decodeStream()
, que utilizaAndroid.BitmapFactory.decodeStream()
. Así que tal vez el error no tiene nada que ver conSkia
después de todo. - También utilicé la imagen de
Imagemagick
en las imágenes de trabajo y las que no funcionaban y comparaba las salidas. No pude encontrar ninguna diferencia que se destacó, por lo que no me trajo más.
Ejemplo de salida Logcat:
D/Picasso(528): Main created [R0] Request{http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg} D/Picasso(528): Dispatcher enqueued [R0]+7ms D/Picasso(528): Main created [R1] Request{http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg} D/Picasso(528): Hunter joined [R1]+1ms to [R0]+10ms, [R1]+1ms D/Picasso(528): Main created [R2] Request{http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg} D/Picasso(528): Hunter joined [R2]+1ms to [R0]+14ms, [R1]+5ms, [R2]+2ms D/Picasso(528): Hunter executing [R0]+21ms, [R1]+12ms, [R2]+9ms D/skia(528): --- decoder->decode returned false D/Picasso(528): Dispatcher retrying [R0]+1456ms, [R1]+1447ms, [R2]+1444ms D/Picasso(528): Hunter executing [R0]+1458ms, [R1]+1448ms, [R2]+1445ms D/skia(528): --- decoder->decode returned false D/Picasso(528): Dispatcher retrying [R0]+2867ms, [R1]+2857ms, [R2]+2854ms D/Picasso(528): Hunter executing [R0]+2868ms, [R1]+2859ms, [R2]+2855ms D/skia(528): --- decoder->decode returned false D/Picasso(528): Dispatcher batched [R0]+3406ms, [R1]+3397ms, [R2]+3394ms for error D/dalvikvm(249): GC_EXPLICIT freed 119 objects / 5288 bytes in 28ms I/TAGZ(528): Error! url = http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg D/Picasso(528): Main errored [R0]+3607ms I/TAGZ(528): Error! url = http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg D/Picasso(528): Main errored [R1]+3598ms I/TAGZ(528): Error! url = http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg D/Picasso(528): Main errored [R2]+3596ms D/Picasso(528): Dispatcher delivered [R0]+3610ms, [R1]+3601ms, [R2]+3598ms
Traza la pila de Picasso
, apuntando a este archivo.
W/System.err(1467): java.io.IOException: Failed to decode stream. W/System.err(1467): at com.squareup.picasso.BitmapHunter.decodeStream(BitmapHunter.java:145) W/System.err(1467): at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:217) W/System.err(1467): at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:159) W/System.err(1467): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) W/System.err(1467): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) W/System.err(1467): at java.util.concurrent.FutureTask.run(FutureTask.java:137) W/System.err(1467): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) W/System.err(1467): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) W/System.err(1467): at java.lang.Thread.run(Thread.java:1096) W/System.err(1467): at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:411)
getView
en mi BaseAdapter
para el ListView
:
@Override public View getView(int position, View convertView, ViewGroup parent) { final View view; Recipe recipe = this.getItem(position); if (convertView != null){ view = convertView; view.setTag(recipe.getId()); } else{ view = myActivity.getLayoutInflater().inflate(R.layout.recipe_item, parent, false); view.setTag(recipe.getId()); } ImageView imageView = (ImageView) view.findViewById(R.id.filtered_recipes_list_image_view); // final String foo = "https://cms-assets.tutsplus.com/uploads/users/21/posts/19431/featured_image/CodeFeature.jpg"; final String foo = "http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg"; Picasso.with(myActivity).setIndicatorsEnabled(true); Picasso.with(myActivity).setLoggingEnabled(true); Picasso.with(myActivity).load(foo).into(imageView, new Callback() { @Override public void onSuccess() { Log.i("TAGZ", "Success! url = " + foo); } @Override public void onError() { Log.i("TAGZ", "Error! url = " + foo); } }); return view; }
- Cómo dibujar con una pintura "invertida" en Android Canvas?
- Uso de Skia en Android NDK
- Dibujo de texto complejo en android ics en c nativo
- Android Graphics Internals
La razón de este error es: Está intentando establecer una imagen de tamaño que es más que el tamaño de diseño de vista de imagen.
¡Encontré una solución simple para eso! Si está utilizando la biblioteca picasso para la carga de la imagen .. entonces, cambiar el tamaño de la imagen para firmar su diseño de vista de la imagen.
es decir, he hecho así:
Picasso.with(ImageLoaderActivity.this) .load("https://static.pexels.com/photos/34578/pexels-photo.jpg") .resize(200,250) .into(img);