我正在使用Picasso进行图像处理,并使用它从后端服务器下载图像并保存到本地设备。我使用Target
来保存图片
Picasso.with(context)
.load(url)
.into(target);
由于目标代码获取位图,我必须使用bitmap.compress()
将图像写入本地磁盘,并使用质量为100的JPEF格式,假设这将保留原始质量。
阅读this似乎这可能不是我想要的。在一种情况下,后端的图像为90kb,写入的图像为370kb。可以使用任意质量值生成原始图像。在没有尺寸/质量变化的情况下使用毕加索保存图像的最简单方法是什么?
Target target = new Target() {
@Override
public void onPrepareLoad(Drawable arg0) {
}
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom arg1) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
FileOutputStream out = null;
try {
out = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void info) {
}
}.execute();
}
@Override
public void onBitmapFailed(Drawable arg0) {
}
};
答案 0 :(得分:-2)
更新:更优雅的解决方案:https://github.com/square/picasso/issues/1025#issuecomment-102661647
使用此解决方案解决了问题。
在我的PagerAdapter
的{{1}}方法中,我运行instantiateItem()
将下载图像,将其保存到文件中,然后使用该图像文件调用Picasso。
PagerAdapter instantiateItem():
AsyncTask
RemoteImageToImageViewAsyncTask
RemoteImageToImageViewAsyncTask remoteImageToImageViewAsyncTask =
new RemoteImageToImageViewAsyncTask(imageView, url, imagePath);
remoteImageToImageViewAsyncTask.execute();