Сжать изображение без потери качества

Я разрабатываю приложение для Android, которое делает снимки и сохраняет их. И я хочу увеличить скорость загрузки за счет сжатия изображения. Но когда я сжал их с помощью BitmapCompress, изображение потеряло свое качество. Здесь :

RAW:

введите здесь описание изображения

СЖАТОЕ :

введите здесь описание изображения

ДО: РАЗМЕР – 1920X1920, РАЗМЕР ФАЙЛА – 2,94 МБ.

ПОСЛЕ: РАЗМЕР – 960 X 960, РАЗМЕР ФАЙЛА – 644 КБ.

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


person CENT1PEDE    schedule 21.02.2014    source источник
comment
это ты на своем дисплее?   -  person Neel    schedule 21.02.2014
comment
Я думаю, вы ищете изменение размера, а не сжатие. Сжатие почти всегда ухудшает качество.   -  person Phantômaxx    schedule 21.02.2014
comment
@ Нил, что ты имеешь в виду?   -  person CENT1PEDE    schedule 21.02.2014
comment
@ArtooDetoo я пытался изменить его размер, и он кажется хорошим, но я хочу сделать его таким же, как в Instagram, необработанное и выходное изображение имеют одинаковый размер и немного меньше жертвуют качеством, но размер выходного файла кажется далеким от сырой.   -  person CENT1PEDE    schedule 21.02.2014
comment
У вас есть два варианта: png без потерь (небольшое сжатие, если есть - отличное качество) и jpeg (сжатие с потерями, плохое качество, в зависимости от степени сжатия). Я бы выбрал коэффициент сжатия высокого качества для JPG, например, 85 (качество %) или около того (более высокое качество, меньшее сжатие).   -  person Phantômaxx    schedule 21.02.2014
comment
хорошо, спасибо @ArtooDetoo, я думаю, ты просто не можешь иметь и то, и другое. Приходится выбирать между качеством и размером. Но я согласен, я тоже выбрал высокий коэффициент сжатия.   -  person CENT1PEDE    schedule 21.02.2014
comment
Это вопрос компромисса... выберите минимально удовлетворительное качество и примите окончательный размер, заданный сжатием, которое вы установили...   -  person Phantômaxx    schedule 21.02.2014
comment
у кого-нибудь есть решение для этого?   -  person Shadow    schedule 19.09.2016


Ответы (4)


Сжатие всегда приводит к снижению качества тем или иным способом.

Вот что вы можете сделать:

  • Измените формат сжатия на PNG, если вы его еще не используете.
  • Найдите идеальный компромисс соотношения качества между размером и качеством
person FD_    schedule 21.02.2014
comment
плохо смотреть в него. Спасибо :) - person CENT1PEDE; 21.02.2014

Я согласен с @Saret BitmapCompress уменьшит размер файла с хорошим качеством. Вы можете получить фотографию ~800-900 КБ из фотографии ~3 МБ, используя сжатие 80% качества без масштабирования. Вы можете получить лучший результат, если обрежете фотографию.

Если вас не волнует масштабирование и детализация по глубине для вас не важна, настоятельно рекомендую следующие библиотеки:

person farukcankaya    schedule 07.01.2017

Bitmap yourbitmap

[...]

OutputStream os = new FileOutputStream(filename); 
yourbitmap.compress(CompressFormat.JPEG, 80, os);  // 80% compression

Это сохранит ваше изображение светлым и с хорошим качеством.

person Alessandro Verona    schedule 21.02.2014

Некоторые ключевые слова, на которые стоит обратить внимание:

  • Библиотеки "удаление EXIF"
  • Библиотеки сжатия без потерь

Пояснения:

Удалите некоторые лишние данные EXIF

Вы можете попробовать уменьшить размер файла, удалив данные EXIF, хранящиеся в изображении. Во многих случаях данные EXIF ​​занимают много места и часто содержат больше информации, чем может понадобиться пользователю для их варианта использования.

Быстрый поиск в Google показывает, что следующий инструмент может быть полезен для удаления данных EXIF. Имеет версии для Windows и Mac:

http://www.exifpurge.com/

Что касается инструмента, который будет работать в вашем процессе сборки Android, он нуждается в дальнейшем поиске. Но, по крайней мере, «библиотека Android для удаления EXIF» — это хорошие ключевые слова для начала.

Сжатие без потерь

Другой альтернативой является исследование сжатия без потерь. Я использовал их в прошлом в веб-разработке. В моем случае я использовал библиотеки, которые работали из командной строки вместе с инструментом сборки.

Быстрый поиск в Google показал следующий сайт, который работает прямо из вашего браузера.

https://compressor.io/compress

person redfox05    schedule 10.11.2017