2

Скажем, у меня есть версия изображения без потерь, которая ранее была сжата в формате JPEG (например, если вы откроете изображение JPEG в mspaint и сохраните его как BMP, я знаю, что некоторые метаданные будут потеряны в этом процессе, но это не моя проблема)

Я хотел бы знать, возможно ли это и как преобразовать его обратно в формат JPEG, не теряя при этом качества изображения, а это означает, что каждый пиксель точно такой же?

РЕДАКТИРОВАТЬ: я полностью понимаю, что преобразование изображения JPEG в формат без потерь не даст мне никакого дополнительного качества. Я спрашиваю об этом, потому что: у меня есть файл PNG, извлеченный из файла SWF. Первоначально (в SWF-файле) объект представлял собой изображение JPEG + альфа-канал, размер файла которого намного меньше по сравнению с имеющимся у меня файлом PNG. Мне нужен оригинальный формат (JPEG + альфа-канал), но у меня больше нет копий исходного SWF-файла (и я тоже не смог найти его в Интернете), поэтому я не могу повторить процесс извлечения.

4 ответа4

4

JPEG - формат с потерями, и нет никакого способа обойти это. Даже при уровне сжатия 100 степень сжатия по-прежнему составляет 2,6:1 (Wikipedia JPEG).

Было предложено несколько вариантов для Lossless JPEG, таких как JPEG 2000, но они не завоевали популярность и их поддержка очень плохая.

Вам лучше конвертировать в формат без потерь, такой как PNG, который все еще сжимает, но без потерь.

3

По сути, вы спрашиваете, можно ли изменить процесс декодирования изображения JPEG. Это совсем другое намерение, чем у обычного кодера JPEG, и я не знаю ни о каком программном обеспечении, которое выполняет это. Математически это возможно * до тех пор, пока к изображению не было применено преобразование или другая модификация после того, как оно было закодировано, но насколько сложно это может быть программно?

Первая проблема - это цветовое пространство - JPEG использует субсэмплирование (цвет, сэмплированный по группе пикселей) yCbCr, тогда как растровое изображение - RGB. Неизбежные потери при преобразовании между этими цветовыми пространствами (а также при любой гамма-коррекции) создают шум. Вторая проблема, которую необходимо решить, - JPEG записывает данные изображения в виде макроблоков (подизображений размера NxN), которые должны быть выведены из выходного изображения декодера. Более подробное объяснение формата JPEG и процесса кодирования можно найти здесь http://www.guillermito2.net/stegano/jsteg/

«расшифровка» JPEG:

Чтобы создать аппроксимацию исходных данных JPEG, нам нужно найти подвыборку, размер и выравнивание макроблоков и коэффициенты дискретного косинусного преобразования (DCT), которые использовались для их кодирования. Остальное идентично обычному процессу кодирования JPEG. Одна наивная реализация, которая приходит на ум, это "образованное предположение и проверка": предположим, что для создания изображения использовались некоторые распространенные реализации JPEG, и пытайтесь применять их до тех пор, пока не будет обнаружено, что в DCT получаются "подобные JPEG" результаты (обычно нули для высокие частоты).

После этого выполните точную настройку коэффициентов для минимальной ошибки по сравнению с оригиналом (т. Е. Растровое изображение сжатого изображения). Этот процесс все еще приведет к компромиссу между ошибкой и размером файла, но он должен быть достаточно близок для практических целей.

Источник: Предыдущая работа по проверке видеокодеков DNx и ProRes, которые применяют кодирование в стиле JPEG к каждому отдельному кадру (программное обеспечение реверсирования декодированных кадров было бы очень интересным и потенциально полезным побочным проектом).

* Существует набор входных данных, которые будут выдавать идентичные выходные данные при прохождении через оригинальный декодер JPEG, однако для любой реконструкции крайне маловероятно, чтобы любая реконструкция была побайтной копией (игнорируя метаданные) исходного файла, поскольку информация была потеряна во время декодирования. процесс.

0

Если вы откроете изображение JPEG с помощью любого редактора и сохраните его как BMP, вы не получите больше качества, чем то, что уже доступно в вашем файле .jpg . Это было бы похоже на преобразование mp3-файла с низкой скоростью передачи битов (например, 128 кбит / с) в гораздо лучший формат, такой как flac , в надежде, что каким-то образом качество будет волшебным образом восстановлено. Не будет

Информация была потеряна, когда вы впервые сохранили изображение в jpg, как сказал harrymc; нет никакой возможности получить эту информацию из этого файла jpg.

Сжатие с потерями является "разрушительным", или также известно как "необратимое". Смотрите https://en.wikipedia.org/wiki/Lossy_compression.

0

Информация почти наверняка была потеряна при конвертации в JPEG. Преобразование этого файла в BMP сохранит информацию, хранящуюся в JPEG, но преобразование BMP обратно в JPEG, вероятно, приведет к потере еще большей информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .