сохранить изображение после применения преобразований с помощью Glide

У меня есть приложение, которое помогает мне изучать программирование для Android, и я застрял. Я загружаю изображение из корзины хранилища firebase, а затем применяю эффекты к этому изображению при загрузке его с помощью Glide. Теперь мне нужно найти способ сохранить это изображение с примененными к нему эффектами обратно в корзину. Я знаю, как загружать изображения и сохранять их в Firebase Storage, моя проблема в том, что я не могу найти способ сохранить изображение после применения эффектов с помощью Glide. Вот простой пример того, чем я сейчас занимаюсь ..

Glide.with(context).load(photo).apply(bitmapTranformation(new ColorFilterTransformation(Color.argb(100, 150, 0, 150))));

Это загружает изображение из Firebase Storage и применяет преобразование цветового фильтра. Есть ли какой-нибудь способ сохранить это изображение с примененным фильтром? Я попытался спросить в канале github о Glide-Transformations, и я попытался спросить в группе Google о Glide, но пока не получил никаких ответов. Я очень надеюсь, что кто-то знает, как это сделать. Единственное, о чем я могу думать, если невозможно, это попытаться сохранить данные фильтра в базе данных, тогда каждый раз, когда кто-то загружает это изображение, мне придется повторно применять фильтр. Я не вижу, что это хорошее решение, так как в конечном итоге я хочу иметь возможность применять несколько преобразований к изображению и пытаться сохранить эту информацию в базе данных, а затем восстанавливать ее каждый раз, кажется неправильным способом сделать это . Я буду более чем счастлив показать больше кода или того, что вам может понадобиться. Спасибо за любую помощь, я очень ценю это. Кстати, если кому-то нужно знать, какую библиотеку я использую для применения эффектов, она находится здесь ... Трансформации скольжения


person Neglected Sanity    schedule 16.12.2017    source источник


Ответы (1)


На всякий случай, если это будет полезно для кого-то еще, это невозможно с библиотекой Glide. Единственный способ сделать это - использовать встроенный кеш изображений Android и перерисовать изображение из него, например:

ImageView im = findViewById(R.id.imageView);
im.setDrawingCacheEnabled(true);
im.buildDrawingCache();
Bitmap bm = im.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

Затем вы можете загрузить в Firebase с помощью

reference.putBytes(baos.toByteArray());

Надеюсь, это будет полезно для всех, мне потребовалось время, чтобы понять это. Еще одна вещь: если вы пытаетесь сохранить изображение, а затем заменить его, добавить эффект и сохранить его, вам нужно вызвать im.destroyDrawingCache () после сжатия растрового изображения.

person Neglected Sanity    schedule 19.12.2017