Попытка использовать компрессор Zelory во фрагменте с Kotlin - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь реализовать сжатие изображений для загрузки файлов в Firebase Storage. Обычный выбор и загрузка изображений работает отлично, но теперь я бы хотел реализовать сжатие изображений. Я столкнулся с компрессором Zelory, и я пытаюсь реализовать его, но я не могу правильно использовать этот код.

Я использую это во фрагменте, и когда я пытаюсь загрузить растровое изображение в линию компрессора, его Кажется, что выдает ошибку в контексте:

error on code

Мой код перед этим берет ImageUri и преобразует его в путь к файлу, как того требует компрессор.

val image_file_path = File(mImageUri.path)
val ctx = activity!!.applicationContext

val tempBitmap = Compressor.compress(ctx, image_file_path)

mImageUri - это то, что я использовал, когда просто выбирал и загружал как обычно в firebase.

Я посмотрел на множество примеров людей, пытающихся использовать этот код, и я могу ' чтобы увидеть, что я делаю не так. это как-то связано с тем, что я использую его во фрагменте? Если это так, я не возражаю, если я изменю свой макет так, чтобы он просто загружался в обычном макете, а не в фрагменте.

У меня изначально был ввод ctx, просто как упражнение, которое представляло проблему, но это не устраняет ошибку. , любая помощь?

1 Ответ

0 голосов
/ 28 марта 2020

Я решил это, не используя Zelory Tool. Это сложно, и мы нашли более «стандартную» библиотеку для достижения того же.

Способ сжатия - взять ваше изображение, преобразовать его в Bitmap и следовать инструкциям, которые я нашел по этой ссылке:

https://android--code.blogspot.com/2018/04/android-kotlin-compress-bitmap-example.html

Это, честно говоря, говорит само за себя, и единственное различие, которое я имел к коду, было то, что они использовали отрисовку stati c, тогда как мне пришлось преобразовать свой URI в Битовая карта. я сделал это, используя следующую строку:

val bitmap = MediaStore.Images.Media.getBitmap(activity?.contentResolver,mImageUri)

В приведенном выше примере я использую activity?, поскольку выполнял эту операцию во фрагменте. Кроме того, mImageUri является сопутствующим объектом, которому я назначаю URI после выбора из галереи телефонов.

Остальное по ссылке.

Удачи всем, кто пробует это. чтобы дать вам ощущение сжатия. идя по этому пути, я смог сжать 8 МБ фото до 350 КБ, используя WEBP. Очень эффективно!

PS: при использовании WEBP мне удалось применить качество 1% в соответствии с указанным выше сжатием без значительной потери качества. Даже при загрузке сжатого изображения на P C вы бы не сказали, что оно было сжатым.

...