Мы используем FFMPEG в нашем Java-приложении, и я пытаюсь преобразовать TIFF-файл в JPG, но требование состоит в том, чтобы сохранить ТОТ ЖЕ DPI, что и в исходном TIFF-файле.
Я новичок в FFMPEG и предпринял следующие неудачные попытки добиться этого:
ffmpeg -y -i test.tif test.jpg
: Успешно преобразовано в jpg, но DPI уменьшилось с 300 до 96. (Проверяется нажатием правой кнопки мыши на изображении --> свойства--> вкладка «Сведения» --> атрибуты горизонтального и вертикального разрешения)ffmpeg -y -i test.tif -c:v copy test.jpg
: Конвертировано в jpg с 300 dpi, но фактический формат файла все еще tif. Похоже, что только расширение изменено на jpg.ffmpeg -y -i test.tif -pix_fmt <format> test.gif
(пробовал все 3 поддерживаемых формата: yuvj420p, yuvj422p yuvj444p): Конвертировал в jpg, но разрешение изменилось с 300 до 96.ffmpeg y -i test.tif -r 1 -q:v <range> test.jpg
(пробовал разный диапазон: от 1 до 10): Та же проблема.Пробовал
-q:v
и-qscale
другие варианты, но меняется только ширина и высота изображения.
Наконец-то я услышал об ImageMagick, и проблема была решена с первой попытки с помощью следующей команды:
magick convert "test.tif" "test.jpg"
: преобразовано в jpg и разрешение 300 dpi.
Можно ли добиться того же самого с помощью FFMPEG? Если да, то помогите мне, пожалуйста, так как я застрял здесь надолго.
решение1
Нужно понимать, что DPI не имеет ничего общего с данными в изображении. Это конструкция, основанная на возможностях вывода оборудования. Изображение имеет определенное количество отдельных пикселей, для которых в файле есть данные. Измерение того, сколько пикселей помещается в дюйме, имеет значение только при выводе на принтер или отображении на устройстве. Сами данные изображения не имеют собственного «размера» пикселей. Некоторые форматы файлов изображений поддерживают метаданные, которые могут включать «DPI», но по сути они бессмысленны для самого изображения.
Информация о DPI, которую вы видите, может быть произвольно назначена программами, которые вы используете для отображения файлов изображений. Если ваша программа для рисования говорит, что изображение имеет разрешение 300 DPI, это может не иметь никакого отношения к данным в файле, которые могут не иметь тега DPI. Файлы TIFF могут содержать теги метаданных (вот почему формат называется «формат файла изображения с тегами»), такие как DPI, но это не имеет значения для данных изображения.
Эти концепции кажутся особенно сложными для понимания людьми, но факт в том, что элемент изображения (пиксель) не имеет размера — только устройства вывода имеют измерения DPI. Ваше требование не менять DPI — это чья-то идея требования сохранения данных, я подозреваю. Кстати, поскольку JPEG — это схема сжатия с потерями, степень применяемого вами сжатия гораздо важнее, чем какие-то произвольные метаданные DPI. Вы можете уничтожить эти изображения, сжимая их в формате JPEG, сохраняя метку DPI.