Когда я сохраняю файл JPG с помощью GIMP, я могу настроить качество, в котором я его сохраняю, от 0 до 100 (я использую 89). Кажется, что я использовал приложение, чтобы увидеть, что это число было в сохраненном файле, но если я это сделал, я не могу на всю жизнь понять, что это было. Любые предложения относительно того, что использовать?
6 ответов
Чтобы добавить к ответу Арджана:
identify
ImageMagick, похоже, действительно заглядывает в изображение JPEG, чтобы угадать настройку качества, используемую для его кодирования.
Исходный код ImageMagick (поболеть за бесплатное программное обеспечение :-)) содержит строки :
/*
Determine the JPEG compression quality from the quantization tables.
*/
sum=0;
for (i=0; i < NUM_QUANT_TBLS; i++)
{
if (jpeg_info.quant_tbl_ptrs[i] != NULL)
for (j=0; j < DCTSIZE2; j++)
sum+=jpeg_info.quant_tbl_ptrs[i]->quantval[j];
(coders/jpeg.c
, строка 843ff. в моей последней версии исходного кода ImageMagick).
Я не достаточно разбираюсь в JPEG, чтобы по-настоящему понять, но, похоже, он делает что-то вроде описанного в этой статье:
Определите коэффициент качества JPEG с помощью Visual C # .NET (мертвая ссылка на январь 2018 года; копия на archive.org с 2015 года)
Так что да, на самом деле identify
может определить настройку качества JPEG только по одному сжатому файлу (хотя результат не всегда может быть абсолютно точным).
После сохранения вы не можете больше узнать качество.
(Установка качества при сохранении просто сообщает программе, сколько потерь вы считаете приемлемыми, но однажды сохраненные: то, что потеряно, теряется. Вам нужен человек, чтобы сказать, если что-то выглядит хорошо.)
Хммм, наверное я ошибся. Я все еще думаю, что вышеупомянутое правильно, но identify
ImageMagick доказывает, что я не прав?
identify -verbose myimage.jpg Image: myimage.jpg Format: JPEG (Joint Photographic Experts Group JFIF format) Class: DirectClass Geometry: 358x240+0+0 Resolution: 300x300 [...] Compression: JPEG Quality: 90 Orientation: Undefined [...]
Я не знаю, как изображение в моем тесте было сохранено, но в нем нет данных EXIF. Может ли качество сохраняться в изображении?
Как отметил Арджан, identify -verbose myimage.jpg
. Поскольку imagemagick - это инструмент CLI, он может быть полезен для сценариев. Подход identify -verbose myimage.jpg | grep ...
очень медленно. Я рекомендую использовать IM, как это
identify -format '%Q' myimage.jpg
Это значительно быстрее.
JPEGsnoop - хорошая альтернатива identify
ImageMagick. Загрузка довольно мала и доступна в портативном формате.
После обработки JPG, вы найдете "Приблизительный коэффициент качества" под маркером DQT.
С библиотекой ImageMagick++ это легко:
Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100