Android: сохранить изображение в формате JPEG в Android без потери данных (на уровне пикселей)

Я работаю над приложением для Android, которое включает загрузку изображения jpeg из внутреннего хранилища и сохранение его обратно во внутреннее хранилище.

Я загружаю растровое изображение изображения и сохраняю изображение, используя растровое изображение. imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)

Но при сохранении изображение сжимается (даже если я ничего не менял в изображении).

Как я могу загрузить и сохранить одно и то же изображение в формате jpeg, ничего не меняя на уровне пикселей?

Ищу способ писать попиксельно (наверное это единственное решение). Я нашел похожий способ - ссылка, но это не только не поддерживает тип файла как jpeg, но и увеличивает размер файла в 6 раз . Хотя он поддерживает точные данные пикселей.


person Lupin    schedule 07.03.2021    source источник
comment
But in saving the image, it gets compressed (even if I did not change anything in the image). Вы имеете в виду: если я сжимаю это растровое изображение в файл jpg, я получаю другой файл jpg. Верно. Теперь повторите с новым файлом jpg. Загрузите его и сожмите в новый файл jpg. Все файлы jpg имеют разный размер файла. Сделайте это десять раз и посмотрите, что произойдет. Вы знаете, что jpg — это алгоритм сжатия с потерями?   -  person blackapps    schedule 07.03.2021
comment
Вместо этого используйте png-файлы. Также пройдите десятикратный тест.   -  person blackapps    schedule 07.03.2021
comment
not only does not maintain the filetype as jpeg but also increases the file size 6 times. Да, конечно, так как тогда все пиксели растрового изображения сохраняются в классическом файле .bmp. А растровые изображения известны тем, что занимают много памяти. Отсюда крик о сжатии, которое привело к .jpg.   -  person blackapps    schedule 07.03.2021
comment
Вопрос: AndroidBitmapUtil Android Bitmap Object To .bmp image file Это не говорит о том, что он может читать файлы .bmp в битмап. Может это? Я полагаю, вы пробовали это.   -  person blackapps    schedule 07.03.2021
comment
Да, png не вызывает никакого сжатия. Но мне нужно изображение jpeg в качестве вывода. Несмотря на то, что jpeg является сжатием с потерями, я считаю, что после фиксированного количества сжатий он вообще не сможет сжиматься. Я заметил, что после первого сжатия (при сохранении растрового изображения) размер значительно уменьшается, но после этого размер остается почти постоянным при каждом сжатии. Но все же пиксели (и коэффициенты DCT) зашифрованы. Должен быть способ обратить jpeg в растровое сжатие, чтобы получить исходное изображение.   -  person Lupin    schedule 08.03.2021
comment
Нет, это никогда не возможно, так как нет информации о потерянных битах для их восстановления. Необратимый. И почему ты не ответил на мой последний вопрос?   -  person blackapps    schedule 08.03.2021
comment
that after a fix number of compressions, it should not be able to compress at all. У вас есть растровое изображение, и оно сжато до изображения в формате jpg. Растровое изображение сохраняет то же разрешение, количество пикселей и объем памяти. И это растровое изображение всегда снова сжимается до jpg.   -  person blackapps    schedule 08.03.2021
comment
Далее вы говорите, что после первого сжатия полученный файл jpg меньше. Это и мой опыт. Но так не должно быть. Если бы алгоритм сжатия приложения «Камера» был бы лучше, чем у класса Bitmap, вы бы получили файлы большего размера.   -  person blackapps    schedule 08.03.2021