Насколько я знаю, JPG — это формат сжатия изображений с потерями.
Между тем, BMP — это обычно несжатый формат изображения, файловая структура которого состоит из bitmapFileHeader (14 байтов) и bitmapInfoHeader (40 байтов), остальная часть которых представляет собой данные пикселей.
Поэтому мне просто нужно передать первые 54 байта и сохранить их как переменную HEADER, а остальные сохранить в переменной PIXELDATA.
В этом состоянии я могу свободно шифровать и расшифровывать PIXELDATA, а также рекомбинировать их с HEADER. Так что целостность файла сохраняется.
Но в случае с JPG все иначе. Я хотел бы попробовать прочитать пиксели вручную, но я не знаю, в какой позиции находятся байты индекса (в отличие от BMP, который пропускает 54 байта).
Я использую Python с различными библиотеками, такими как PIL или Numpy. Оба смогли прочитать пиксели, но при сохранении в виде нового файла JPG он отличался от оригинала тем, что:
- Сравнение контрольных сумм SHA-256.
- Различные размеры файлов.
- Некоторые цвета пикселей меняются по сравнению с оригиналом, если вы посмотрите на него более подробно.
Мой вопрос: есть ли другой способ прочитать пиксельные данные файла JPG, но при этом обеспечить целостность исходного файла JPG при сохранении в новом файле JPG (такая же контрольная сумма, размеры файла и цвет пикселя)?