Подтвердить что ты не робот

Можно ли сообщить уровень качества JPEG?

Это действительно вопрос из двух частей, поскольку я не совсем понимаю, как все это работает:

Моя ситуация: я пишу веб-приложение, которое позволяет пользователю загружать изображение. Мое приложение затем меняет размер на что-то отображаемое (например: 640x480-ish) и сохраняет файл для дальнейшего использования.

Мои вопросы:

  • Учитывая произвольный файл JPEG, можно ли указать уровень качества, чтобы я мог использовать то же качество при сохранении измененного изображения?
  • Это даже имеет значение? Должен ли я сохранять все изображения на достойном уровне (например, 75-80), независимо от исходного качества?

Я не настолько уверен в этом, потому что, как я его понимаю: (давайте примем крайний пример), если у кого-то было 5-мегапиксельное изображение, сохраненное при качестве 0, оно было бы блочным. Уменьшив размер изображения до 640x480, блочность будет сглажена и едва менее заметна... пока я не сохранил ее с качеством 0 снова...

На другом конце спектра, если бы имелось изображение 800x600 с q = 0, изменение размера до 640x480 не изменило бы того факта, что оно выглядит как полное дерьмо, поэтому сохранение с q = 80 было бы избыточными.

Я даже близко?

Я использую библиотеку GD2 на PHP, если это полезно

4b9b3361

Ответ 1

  • JPEG - это формат с потерями. Каждый раз, когда вы сохраняете одно и то же изображение в формате JPEG, независимо от уровня качества, вы уменьшаете фактическое качество изображения. Поэтому даже если вы получили качественный уровень из файла, вы не смогли бы сохранить такое же качество при сохранении JPEG снова (даже при качестве = 100).

  • Вы должны сохранить свой JPEG так же качественно, насколько можете себе позволить в плане размера файла. Или используйте формат без потерь, например PNG.

Файлы JPEG низкого качества не просто становятся более блочными. Вместо этого глубина цвета уменьшается, и детали разделов изображения удаляются. Вы не можете полагаться на изображения более низкого качества, которые являются блочными и выглядят нормально при меньших размерах.

В соответствии с спецификацией JFIF номер качества (0-100) изображения сохраняется, не сохраняется в заголовке изображения, хотя плотность пикселей по горизонтали и вертикали сохраняется.

Ответ 2

Вы можете просмотреть уровень сжатия с помощью ImageMagick. Инструкции по загрузке и установке можно найти на официальном сайте .

После его установки запустите в командной строке следующую команду:

identify -format '%Q' yourimage.jpg

И вы должны получить значение от 0 (низкое качество, малый размер файла) до 100 (высокое качество, большой размер файла).

Источник информации

Ответ 3

Алгоритм сжатия Jpeg имеет некоторые параметры, которые влияют на качество изображения результата.

Одним из таких параметров являются таблицы квантования, которые определяют, сколько бит будет использоваться для каждого коэффициента. В разных программах используются разные таблицы валидации.

Некоторые программы позволяют пользователю установить уровень качества 0-100. Но общего количества этого числа нет. Изображение, сделанное с помощью Photoshop с качеством 60%, занимает 46 КБ, а изображение, сделанное с помощью GIMP, занимает всего 26 КБ.

Таблицы квантования также различны.

Существуют и другие параметры, такие как метод подвыборки, dct и т.д.

Таким образом, вы не можете описать все их одним номером уровня качества, и вы не можете сравнивать качество jpeg-изображений по одному номеру. Но вы можете создать такое количество, как photoshop или gimp, который будет описывать компромисс между размером по качеству.

Дополнительная информация: http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html

Обычная практика заключается в том, что вы изменяете размер изображения до соответствующего размера и применяете jpeg после этого. В этом случае огромные и средние изображения будут иметь одинаковый размер и качество.

Ответ 4

Для будущих посетителей, проверяя качество заданного jpeg, вы можете просто использовать инструмент imagemagick:

$> identify -format '%Q' filename.jpg
   92%

Ответ 5

Итак, в основном вы беспокоитесь о двух случаях:

  • Если входящее изображение имеет слишком высокий уровень качества, может потребоваться некорректное пространство. Поэтому вам может потребоваться, например, уменьшить входящий q = 99 до q = 85.

  • Если входящее изображение имеет слишком низкий уровень качества, это может быть пустой тратой времени, чтобы повысить ее качество. За исключением того, что изображение, у которого было отброшено большое количество данных, волшебным образом не займет больше места при повышении качества - блокированные изображения будут очень хорошо сжиматься даже при высоких настройках качества. Поэтому, на мой взгляд, вполне нормально поднимать входящие q = 1 на q = 85.

Из этого я бы подумал, что просто заставить достойную настройку качества - вполне приемлемая вещь.

Ответ 6

Каждое новое сохранение файла будет еще больше уменьшать общее качество, используя более высокие значения качества, вы сохраните больше изображения. Независимо от качества оригинального изображения.

Ответ 7

Вот формула, которую я нашел, чтобы хорошо работать:

  • jpg100size (размер не должен превышать в байтах для качества 98-100%) = ширина * высота /1.7

  • jpgxsize = jpg100size * x (x = процент, например 0,65)

поэтому вы можете использовать их, чтобы узнать статистически, какое качество вы сохранили в последний раз. если вы хотите получить его, чтобы сказать 65% -ное качество, и если вы хотите избежать повторной выборки, вы должны сначала сравнить размер, чтобы убедиться, что он еще не слишком низкий, и только затем уменьшить качество

Ответ 8

Как уже было два ответа, используя identify, здесь один, который также выводит имя файла (для одновременного сканирования нескольких файлов):

Если вы хотите иметь простой вывод filename: quality для использования на нескольких изображениях, вы можете использовать

identify -format '%f: %Q' *

to показать имя файла + сжатие всех файлов в текущем каталоге.

Ответ 9

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

Ответ 10

Это может быть глупый вопрос, но почему вы должны беспокоиться о микроменеджментах качества документа? Я считаю, что если вы используете ImageMagick для преобразования, то он будет лучше управлять качеством JPEG для вас. http://www.php.net/manual/en/intro.imagick.php