Обновление / изменение кэшированного растрового изображения с использованием Picasso и OkHttp

В настоящее время я использую Picasso и OkHttp для моего кэширования растровых изображений. То, что я хочу сделать, это получить конкретное кэшированное растровое изображение, нарисовать его, а затем поместить нарисованное на растровое изображение обратно в память и кеш диска. Моя реализация довольно стандартная, я просто использую Target и добавляю загруженное растровое изображение к пользовательскому ImageView, который находится в GridView. Я смотрю вокруг, и я не могу найти способ сделать это. Поддерживают ли эти библиотеки что-то вроде этого?

Solutions Collecting From Web of "Обновление / изменение кэшированного растрового изображения с использованием Picasso и OkHttp"

Picasso – это просто библиотека для загрузки кеширования и отображения изображения (с перками, такими как преобразования, перекрестное затухание и т. Д.), А не для редактирования. То, что вы, кажется, делаете, похоже, выходит за рамки использования Пикассо.

Я бы сказал, что вы все равно можете использовать Picasso для загрузки изображения, если хотите, но когда вы получаете Bitmap, ваше приложение хранит измененную версию. Поэтому, когда пользователь заканчивает рисование, вы должны хранить его локально в файл самостоятельно (если это большой образ, вы также можете создавать отдельные миниатюры для GridView) и использовать эту версию. Чтобы сохранить измененное содержимое Bitmap в файл, который вы можете вызвать

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

Вы можете загружать локальные файлы в свой GridView с помощью Picasso: Picasso.with(context).load("fileUrl").into(mImageView); , Таким образом, в вашем коде вы можете проверить, есть ли у вас локальная отредактированная версия и загрузить ее из локального файла с помощью Picasso или загрузить его с сервера, используя Picasso.

Если вы хотите сохранить изображение на сервере, вы можете отправить его на сервер после того, как пользователь отредактировал его. Затем Picasso + OkHttp загрузит его снова (при условии, что вы обновили атрибуты кэша HTTP, такие как ETag на сервере).

Попробуйте использовать преобразование 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.load(url).transform(new YourTransformation()).into(imageView);