Android: сжатие WEBP без потерь

Я сжимаю изображение в формате WEBP следующим кодом:

bitmap.compress(Bitmap.CompressFormat.WEBP, 100, outputStream)

Хотя я использую самые высокие настройки качества, похоже, что изображение не сжато без потерь, а с потерями. Согласно документации для разработчиков Android, должна быть предусмотрена возможность сжатия WEBP-файлов без потерь: http://developer.android.com/guide/appendix/media-formats.html http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html

Я делаю это на Nexus 4 с Android 4.4.2 Kitkat. Кроме того, я использую самый высокий SDK в своем проекте.

У кого-нибудь есть идея, как сохранить растровые изображения как WEBP-изображения без потерь?


person Alex    schedule 06.04.2014    source источник
comment
Я не использовал WEBP, но есть ли способ использовать некоторые другие утилиты (например, ImageMagick), чтобы окончательно подтвердить, что изображение сохраняется с потерями, а не без потерь? Если бы я был игроком на ставках, я бы предположил, что вы правы, а страница форматов мультимедиа неверна, где нет прямых средств для кодирования в WEBP без потерь. Но если бы я был на вашем месте, я бы хотел точно знать, сохраняется ли изображение с потерями или нет.   -  person CommonsWare    schedule 06.04.2014
comment
@CommonsWare Я снова загружаю изображение в свое приложение, и там видно, что пиксели не такие, как раньше. Если я делаю то же самое с PNG в качестве алгоритма сжатия, он работает нормально, а это значит, что я снова получаю точно такое же изображение. Я использую точно такой же алгоритм, я просто перехожу с PNG на WEBP.   -  person Alex    schedule 06.04.2014
comment
@CommonsWare ... кроме того, многие пиксели имеют одинаковое значение после сохранения изображения в формате WEBP, что указывает на сжатие с потерями.   -  person Alex    schedule 06.04.2014


Ответы (1)


Начиная с Build.VERSION_CODES.Q, значение 100 приводит к созданию файла в формате WEBP без потерь. В противном случае файл будет в формате WEBP с потерями.

https://developer.android.com/reference/android/graphics/Bitmap.CompressFormat#WEBP

Кажется, что сжатие WebP без потерь доступно только для устройств с Android не ниже Q, если указать WEBP_LOSSLESS в качестве формата сжатия (или WEBP с качеством 100).

person Pat Lee    schedule 14.08.2020