Алгоритм JPEG использует комбинацию шагов с потерями и без потерь. Алгоритм разбивает изображение на 8x8 блоков , известных как минимальные единицы кодирования (MCU). Если изображение имеет размеры, которые не делятся на 8, MCU вдоль правого и нижнего краев дополняются. Каждый MCU затем обрабатывается с помощью FFT / DCT (Быстрое преобразование Фурье / Дискретное косинусное преобразование) и квантуется. Квантование является основным шагом с потерями. Затем выполняется ряд шагов без потерь, включая сжатие без потерь.
Операции без потерь можно выполнить в JPEG, отменив последние шаги без потерь и выполнив операции без потерь на MCU, , например, переставив их. Если размеры изображения не делятся на 8 (или 16, если включена подвыборка цветности) , артефакты могут появляться по краям , потому что дополненные блоки будут вдоль неправильного края, и блоки, которые нуждаются набивки не будет.
По умолчанию exiftran
отбрасывает эти блоки. Однако эти блоки можно сохранить, и артефакты по краям появляются, если вызывается exiftran
с флагом -np
.
Я подозреваю, что большинство цифровых камер и сотовых телефонов производят изображения с размерами, которые не вызовут этой проблемы, поскольку для этого оптимально используются доступные ресурсы. Это касается устройств, которые я проверял, производства Apple, Canon, FujiFilm, Lenovo и Samsung.