2015-01-14 5 views
2

Следующий сценарий должен создать изображение с более низким качеством и таким меньшим размером файла (kb), вместо этого он создает изображение с более низким качеством и большим размером файла.PHP GD imagejpeg: размер выходного файла больше размера, чем оригинал

На мой тест оригинал около 300Кб, используя качество 90% выход почти двойное и использование качества 100%, выход более 1Мб ...

<?php 

$quality = 90; 
$path = '/var/www/TEST/'; 
$inputSrc = $path . 'original.jpg'; 
$outputSrc = $path . 'after' . $quality . '.jpg'; 

$handler = imagecreatefromjpeg($inputSrc); 
imagejpeg($handler, $outputSrc, $quality); 

Я предполагаю, что вопрос связанные с imagejpeg плохая реализация ...

  • Есть ли способ обхода этого?
  • ImageMagick лучшее решение?

Благодаря

Update

мне было интересно, поэтому я дал попытаться ImageMagick и, к сожалению, у меня есть аналогичный результат (чуть лучше).

Полные результаты тестов:

Оригинальный размер: 294.6Kb

  • GD (imagejpeg) 90%: 581.7Kb
  • GD (imagejpeg) 100%: 1.1Mb
  • ImageMagick 90%: 431.7Kb
  • ImageMagick 100%: 780.9kb

Update 2

Я сделал еще некоторое испытание с GIMP и выглядит, что для того, чтобы получить файл с очень похожим размером с оригиналом у вас есть для проверки опции use quality setting from original image.

Теперь я смущен больше ... так как, когда я выбираю эту настройку, Gimp автоматически изменяет качество вывода на 74% (для примера изображения).
Я предполагал, что значение качества JPEG, если оно ниже 100%, уменьшает качество изображения на каждой итерации сохранения ... но я начинаю думать, что я здесь неправ.

Update 3

С ImageMagick не нужно указать качество образца и, если оставить его пустым ImageMagick будет использовать тот же качества обнаруженного во входном изображении.
Итак, для примера изображения обнаружено как качество 69, а outfile - 326kb. Это лучший результат.

Вот изображение Я использую:

enter image description here

+0

Вы можете снизить качество jpeg с '90' до' 75' (или даже ниже), и если у вас есть доступ к ImageMagick, это замечательный инструмент! –

+0

Согласившись с вышеприведенным комментарием, проблема связана с '90', это, вероятно, проблема. – Ohgodwhy

+0

Давай, если я уменьшу качество изображения, я должен получить меньший размер файла .. и так же, если я использую 100 качеств, я должен получить одинаковый размер файла, вместо этого получаю изображение 4 раза больше – WonderLand

ответ

3

У меня было немного посмотреть на это. Вы можете работать в обратном направлении в ImageMagick и, вместо того, чтобы определять качество и видеть, какие результаты размера, вы можете определить размер и посмотреть, какие результаты качества. Таким образом, для конкретного примера, вы можете сказать, что вы хотите, чтобы выходной файл не должен превышать 100 КБ, как это:

convert MShRR.jpg -define jpeg:extent=100k out.jpg 

и вы получите 99Kb как это:

[email protected] 1 mark staff 294608 14 Jan 09:36 MShRR.jpg 
[email protected] 1 mark staff  99989 14 Jan 09:44 out.jpg 

на моих глазах, в результате изображение немного posterised:

enter image description here

часто можно добавить небольшое количество размытия, чтобы скрыть это, следующим образом:

convert MShRR.jpg -blur x0.5 -define jpeg:extent=100k out.jpg 

enter image description here

YMMV - Ваша оценка может измениться !!!

+0

Я немного смущен, может быть, потому, что я не очень разбираюсь в манипуляции изображениями ... Невозможно открыть jpg и повторно сохранить его, не имея большего размера? – WonderLand

+2

Различные программы принимают различные решения относительно точности воспроизведения, качества изображения, гладкости, резкости, времени обработки, размера файла. –

+0

да, конечно. Но если я сэкономлю 10 раз изображение, и каждый раз я выбираю качество 70% ... каждый сохраненный файл будет на 30% меньше качества? Из того, что я понимаю, нет – WonderLand

 Смежные вопросы

  • Нет связанных вопросов^_^