Определить уровень сжатия JPG? - PullRequest
6 голосов
/ 18 февраля 2012

Обычно, когда изображение попадает на мой сайт, я сохраняю его как jpg, используя библиотеку изображений, которую я написал, с качеством по умолчанию 80%.Теперь, когда мне нужно будет выполнить какую-то другую операцию (например, обрезать его или даже просто изменить его размер), изображение будет открыто как jpg, обработано, а затем сохранено обратно.Однако, если он был сжат до того, как я не захочу его снова сжать, иначе каждый раз, когда мне нужно будет выполнить операцию, качество будет падать.

Есть ли способ, которым я могу определить, сколько изображений уже было сжато раньше (по сравнению с его версией png, я думаю), используя инструменты в стандартных библиотеках php GD?Я знаю, что инструменты, которые обнаруживают, где изображение было Photoshopped, делают это путем сравнения относительных величин сжатия, поэтому я думаю, что можно определить степень сжатия, но кто-нибудь знает, как мне поступить в этом расчете?Спасибо.

Ответы [ 3 ]

8 голосов
/ 18 февраля 2012

Вы не можете получить значение качества из JPG. Кроме того, значение качества зависит от кодера. Это не стандарт или что-то в этом роде. Некоторые программы имеют только (низкий, средний, высокий), в некоторых 20 может быть лучше, чем 90.

Во-вторых, JPG просто теряет качество при каждом последующем кодировании, даже если вы каждый раз сохраняете его как лучшее качество. Печальная правда жизни :) Единственные операции, которые не ухудшают качество, - это перевороты и повороты (и кадрирование, если они выровнены по размеру блока JPEG).

Правило большого пальца: кодируйте его каждый раз с одним и тем же значением качества. Пример: если вы сохраните его один раз, скажем, на 60, то выигрыш при сохранении на 80 в следующий раз не получится. Просто больший размер файла.

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

1 голос
/ 15 января 2017

Чтобы избежать многократного сжатия изображения, вы можете просто сравнить размер файла с измененным размером с оригиналом.

  • Если размер файла заметно больше, значит, вы увеличили скорость, поэтому не используйте его.
  • Если он заметно ниже, чем сжатый, используйте его.

Кроме того, поскольку повторное сжатие файла с той же скоростью лишь незначительно уменьшает размер файла, еслиВы используете круглые числа для своих ставок (60%, 70%, 80% и т. д.). Вы можете определить скорость, если размер файла изменения размера очень похож на размер оригинала.

Например, сжатие 1,844 KBфайл по адресу:
- 90% = 2,115 KB.Размер увеличился, поэтому я не буду его использовать.
- 80% = 1,843 KB.Это почти идентично размеру файла оригинала, поэтому я могу предположить, что оригинал имеет скорость 80%.
- 70% = 1,567 KB.Это сжалось, поэтому я буду использовать его.

Наконец, если вас интересует только скорость изображений, которые вы сжимали самостоятельно, вы можете использовать PHP для сохранения скорости, которую вы используете в метаданных файла.

1 голос
/ 18 февраля 2012

Вам нужно будет сохранить качество изображения в базе данных, чтобы вы могли знать, было ли оно уже сжато или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...