毕加索 - 下载前缩小图像以获得更好的性能

时间:2015-01-15 05:03:15

标签: android performance picasso

我有一个图像列表,我必须从服务器下载并在Android应用程序的listView中显示它们。它们的比例各不相同,因为我想让每个ImageView与设备的宽度相匹配,我无法确定它们的高度。

我也知道我可以通过在下载之前缩小图像来提高性能,就像Picasso用fit()和resize()做的那样。

我正在将Picasso用于我的项目。问题是,我不能使用Picasso的fit()和resize()方法,这是在下载之前缩小图像尺寸的方法,如果我事先不知道imageView的高度。

所以我尝试了其他方法。我想知道转换是否也会缩小规模?

new Transformation() {
                    @Override
                    public Bitmap transform(Bitmap source) {
                        int targetHeight = deviceWidth;
                        double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
                        int targetWidth = (int) (targetHeight / aspectRatio);
                        Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
                        if (result != source) {
                            // Same bitmap is returned if sizes are the same
                            source.recycle();
                        }
                        return result;
                    }

                    @Override
                    public String key() {
                        return "transformation" + " desiredWidth";
                    }

非常感谢。

2 个答案:

答案 0 :(得分:1)

您无法在下载前“缩小图像尺寸”。

Picasso(以及其他所有内容)按原样下载原始图像,然后根据容器的尺寸进行计算以缩放图像。

如果您既不使用fit()也不使用resize(),Picasso将以全分辨率加载图像:即原始图像的分辨率。

答案 1 :(得分:1)

您可以使用Thumbor服务在下载之前裁剪和调整图片大小。 Square有一个很好的Java客户端 - Pollexor。 Pollexor特别Picasso RequestTransformer。也就是说,您将所有预处理提取到后端。