Уменьшить размер изображения с указанным соотношением - android

Я хочу разработать сжатый размер изображений по факторам.

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

myImage.compress(Bitmap.CompressFormat.JPEG, compressRatio, out);

возможные значения для compressRatio - 100, 50 и 25

так что в случае 100 сохраненное изображение в исходном размере говорит (1 МБ) в случае 50 сохранения размером 0,5 МБ и 25 сохранений при размере изображения 0,25 МБ.

но актуально после того, как я передаю значения, я получаю разные значения, например

for 100 the size is about 1.4M, for 50 sizes is about 250k, for 25 sizes is about 150k, the right scaling should be if for 100 the size is about 1.4M, for 50 sizes is about 700k, for 25 sizes is about 300K

может ли кто-нибудь помочь мне понять, почему он не работает должным образом?

================================================== ========

Редактировать 1: поскольку CommonsWare упомянул, что compress() не может этого достичь, есть ли какие-либо предложения сделать то, что мне нужно, реальным

Подсказка: я не хочу изменять его ширину и высоту, мне нужно сохранить их как исходные размеры изображения, но в разных размерах.

0
0
70
1

Ответы 1

scale down image size with specified ratio - android

Это не имеет ничего общего с методом compress() на Bitmap. Учитывая существующий Bitmap, вы можете вызвать createScaledBitmap() для создания масштабированного растрового изображения.

so that in case of 100 the saved image in original size says (1MB) in case of 50 save size 0.5MB and 25 save in 0.25MB image size.

Это не то, как работает параметр коэффициента сжатия для compress(). Точное значение этого значения зависит от формата изображения. Для JPEG он определяет степень сжатия с потерями, но это не линейный масштаб. Например, значение 0 не позволяет сохранить изображение как файл с нулевым байтом.

Спасибо за ваше объяснение. есть ли способ достичь того, что мне нужно? createScaledBitmap(), я думаю, изменит свою ширину и высоту. Мне нужно сохранить их как исходные размеры изображения, но в разных размерах. можно ли этого достичь?

Moustafa EL-Saghier 03.06.2018 18:53

@M_ELsaghier: «Мне нужно сохранить исходные размеры изображения, но в разных размерах» - я не знаю, что вы имеете в виду. Размерность является - размер изображения. Если под «размером» вы имеете в виду размер в байтах на диске, вы не можете изменить его произвольно, и вы не можете изменить его, не влияя на качество изображения. Как вы видели, вы можете получить файл меньшего размера, используя более низкий коэффициент сжатия, но полученное изображение может выглядеть не очень хорошо.

CommonsWare 03.06.2018 18:59

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

Moustafa EL-Saghier 03.06.2018 19:00

@M_ELsaghier: У вас нет возможности узнать, насколько большим будет файл, пока вы не напишете файл. Помимо изменения коэффициента сжатия, который вы предоставляете для compress(), все, что вы можете сделать, это изменить цвета изображения. Например, сплошное черное изображение сжимается лучше, чем фотография цветка, даже если оба изображения имеют одинаковое разрешение.

CommonsWare 03.06.2018 19:06

Вы имеете в виду, что я не могу достичь того, что мне нужно, просто попробуйте приблизительно оценить значение качества в методе сжатия, верно?

Moustafa EL-Saghier 03.06.2018 20:11

@M_ELsaghier: Если «что [вам] нужно» - это точно знать размер файла, который вы получите для данного вызова compress(), это невозможно. Это зависит от разрешения изображения и от того, насколько хорошо сжимаются данные изображения. Стремление к определенному размеру файла обычно бессмысленно, так как нет гарантии, что вы сможете его достичь с учетом коэффициента сжатия любой. Обычно мы выбираем коэффициент сжатия, который достаточно хорошо подходит для того типа изображений, которые у нас есть (например, фотографий), и просто используем его.

CommonsWare 03.06.2018 20:13

как я мог рассчитать этот коэффициент?

Moustafa EL-Saghier 03.06.2018 20:23

@M_ELsaghier: Попробуйте некоторые значения. Посмотрите на изображения. Посмотрите, приемлемо ли качество изображения. Выберите значение, обеспечивающее наименьший размер при приемлемом качестве.

CommonsWare 03.06.2018 20:38

Другие вопросы по теме