gpt4 book ai didi

android - picasso 无法解码某些图像 : skia decode returned false

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:49 29 4
gpt4 key购买 nike

更新:这个问题似乎可以归结为一些图像被正确解码,而另一些则没有。如果我将不工作的 JPEG 转换为 png,它们就可以工作。我的所有图像都不是直接从 Nikon D5000Panasonic LumixSony Experia 拍摄的 JPEG手机可以解码。


我正在使用 Picasso 在我的 Android 应用程序中填充一个 ListView。但是,对于我要使用的图像,我遇到了错误 --- decoder->decode returned false,但它对我在网络上运行的其他图片工作正常。因此,我相信它与图像有关,但我不确定。错误出现在 Picasso 使用的 Skia 库中(据我所知)。

例如,this 图像可以正常工作,而 this 则不能,而我需要处理的是后者。我需要使用的所有其他图片都是用同一台相机拍摄的,并由 Gimp 以相同的方式编辑,生成的图像与第一张类似,但没有一张有效。因此,我怀疑它与图像本身有关,而不是与解码器有关。

弹出的几个问题:

  1. 元数据是否可以在此过程中发挥作用?所有图片的元数据都相似。
  2. 会不会是编码图像的某些东西让编码器发疯了?如果是这样,它可能是什么,我该如何调查它?文件结尾丢失或其他什么?
  3. 是否可以从 PicassoSkia 启用更多调试和输出?例如,堆栈跟踪?
  4. 非 UTF8 字符会不会把事情搞砸,或者这个处理是否正确?示例图像中没有 UTF8 字符,但某些图像可能有。

我尝试过的:

  1. 我尝试在 Inkscape 中打开一个无效图像并将其导出为 png 文件。现在,图像确实有效了,所以似乎有一些使用 JPEG 编码的东西。
  2. 另一种尝试是在 Gimp 中打开图像并再次导出为 JPEG,但这没有帮助。
  3. 我还尝试在 Shotwell 中打开图像并重新导出为 JPEG,包括元数据和不包括元数据,但这些图像都不起作用。导出为 png 与从 Inkscape 导出为 png 一样。
  4. 所有无法正常工作的图像都是用 Nikon D5000 相机拍摄的,所以我尝试用 Sony Experia 手机和 Panasonic Lumix 拍摄一些图像 相机。 JPEG 都不能直接工作,但如果转换为 PNG,它们都会被解码。
  5. 我尝试设置一个 Picasso.Builder 对象,如 here 所示,以获取堆栈跟踪。我在下面粘贴了堆栈跟踪。看起来它实际上是 Android.BitmapFactory.decodeStream() 失败了,因为堆栈跟踪指向 com.squareup.picasso.BitmapHunter.decodeStream(),它利用了 Android.BitmapFactory.decodeStream()。所以也许这个错误毕竟与 Skia 无关。
  6. 我还在工作图像和非工作图像上使用了 Imagemagickidentify -verbose 并比较了输出。我找不到任何突出的差异,所以它没有给我带来任何进一步的影响。

示例 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

来自 Picasso 的堆栈跟踪,指向 this 文件。

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)
ListViewBaseAdapter 中的

getView 方法:

@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;
}

最佳答案

出现该错误的原因是:您尝试设置的图像尺寸大于 ImageView 布局尺寸。

我找到了一个简单的解决方案!如果您正在使用 picasso 库加载图像……那么,请调整图像大小以适合您的 ImageView 布局。

也就是说,我是这样做的:

Picasso.with(ImageLoaderActivity.this)
.load("https://static.pexels.com/photos/34578/pexels-photo.jpg")
.resize(200,250)
.into(img);

关于android - picasso 无法解码某些图像 : skia decode returned false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952980/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com