使用Picasso和OkHttp更新/更改缓存的位图



我目前正在使用Picasso和OkHttp进行位图缓存。我想做的是检索一个特定的缓存位图,在上面绘制,然后将绘制的位图放回内存和磁盘缓存中。我的实现非常标准,我只是使用Target并将加载的位图添加到位于GridView中的自定义ImageView中。我一直在四处寻找,似乎找不到办法。这些库甚至支持这样的东西吗?

Picasso只是下载缓存和显示图像的库(具有转换、交叉褪色等功能),而不是用于编辑。你所做的似乎超出了毕加索的使用范围。

我想说,如果你愿意,你仍然可以使用Picasso下载图像,但当你得到位图时,你的应用程序会存储它的修改版本。因此,当用户完成绘制时,您必须自己将其本地存储到文件中(如果是大图像,您也可以为GridView创建单独的较小缩略图)并使用此版本。要将更改后的位图内容保存到文件中,可以调用

outBitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);

您也可以使用Picasso将本地文件加载到GridView中:Picasso.with(context).load("fileUrl").into(mImageView);。因此,在您的代码中,您可以检查是否有本地编辑版本,并使用Picasso从本地文件加载它,或者使用Picassos从服务器加载它。

如果你想在服务器上保存图像,你可以在用户编辑后将其发送到服务器。然后Picasso+OkHttp会再次下载它(假设你在服务器上更新了ETag等http缓存属性)。

尝试使用picasso转换

picasso的工作流程是这样的:

  1. 从网络获取图像
  2. 在内存/缓存中缓存原始图像
  3. 应用可选转换并缓存这些结果

因此,在您的情况下,您需要进行自定义转换来更改位图。第二次请求具有此特定转换的位图时,它将从缓存中加载。

public class YourTransformation implements com.squareup.picasso.Transformation {
    @Override
    public Bitmap transform ( final Bitmap source ) {
        final Paint paint = new Paint();
        Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        // DO YOUR DRAWING STUFF ON CANVAS
        if (source != output) {
            source.recycle();
        }
        return output;
     }
     @Override
     public String key () {
         return "customTransformation" + SOME_UNIQUE_IDENTIFIER 
     }
}

不要忘记重写key()方法,因为picasso使用它来生成缓存项。

在你的代码中,你可以简单地将其与你的普通picasso请求一起使用:

picasso.load(url).transform(new YourTransformation()).into(imageView);

最新更新