Вопрос

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

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

Мои вопросы:

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

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

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

Я вообще близок к этому?

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

identify -format '%Q' yourimage.jpg

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

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

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

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

Алгоритм сжатия 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.В этом случае большие и средние изображения будут иметь одинаковый размер и качество.

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

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

identify -format '%f: %Q' *

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

Итак, есть в основном два случая, которые вас волнуют:

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

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

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

Вот формула, которая, как я обнаружил, хорошо работает:

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

  2. jpgxsize = jpg100size*x (x = процент, например0.65)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top