Теоретически возможно без потерь кодировать изображение BMP, известное из формата JPEG, в формате JPEG. То есть, вы можете сделать следующее преобразование:
JPEG A => BMP X -> JPEG B => BMP X
где =>
является операция декомпрессии и ->
операция сжатия.
Обратите внимание, что это не довольно, что вы просите. Вы спрашиваете выше плюс, что JPEG A == JPEG B
. Я сомневаюсь (но не знаю точно), что каждое JPEG-представление декодирует уникальный образ, поэтому я предполагаю, что эта гарантия не может быть выполнена.
Причина, по которой можно сделать кодирование без потерь, заключается в том, что существует конечное число изображений JPEG изображения определенного размера и глубины. Это число неуправляемо велико, но тем не менее оно конечно. Алгоритм кодирования может просто состоять в том, чтобы декодировать каждое из этих представлений до тех пор, пока вы не найдете тот, который точно соответствует вашему BMP-изображению, а затем выводит это представление. Алгоритм совершенно непрактичен, но показывает, что проблема ограничена.
Практический алгоритм вполне может существовать. Например, можно представить себе итеративный подход, например:
- Выберите начальные параметры сжатия (выборка и квантование цвета).
- Сжатие BMP изображение в кандидате JPEG.
- Decompress кандидат JPEG.
- Сравните декомпрессированное изображение с оригинальным BMP.
- Если то же самое, выведите кандидат JPEG и завершите работу.
- Если разные, обновлять параметры сжатия и возврат к шагу 2.
Хитрость бы на этом этапе обновления - выяснить, как изображение дифференциалы может направлять вас, чтобы улучшить параметры.
Возможно, вы сможете написать код, который будет работать в подавляющем большинстве случаев. Есть basically only 3 color sampling choices, и я думаю, что нет , что многие алгоритмы для генерации матриц квантования. Вы можете реализовать их все или, альтернативно, сканировать Интернет для файлов JPEG и записывать уникальные параметры сжатия. Тогда вы, скорее всего, потерпите неудачу в первую очередь на изображениях от новых компрессоров.
Важно отметить, что эти подходы зависят от использования одного и того же декомпрессора для операций =>
, поскольку разные декомпрессоры могут не создавать один бит изображения для бит из одного файла JPEG.
Преобразование в jpeg является потерянным, даже если оно не видимым глазом. Используйте PNG вместо bmp. Вы получаете лучшее сжатие без потерь. – Gimmy
@ Gimmy, вы пропустите момент. Прочтите весь вопрос? – Rookie