За последние 24 часа нас посетили 17887 программистов и 1603 робота. Сейчас ищут 1860 программистов ...

Imagick сам сжимает изображение

Тема в разделе "Обработка изображений средствами PHP", создана пользователем dj-sphinx, 9 фев 2015.

Статус темы:
Закрыта.
  1. dj-sphinx

    dj-sphinx Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Всем привет!
    Голову уже напрочь сломал Imagick-ом. Мне нужно изменить размер картинки. Все понятно как сделать, но вот вопрос по качеству... Провел исследование с одной картинкой размером 23,2 Кб, после вот этой строки (строк):

    $img = new Imagick();
    $img->readImage(realpath($src));

    или

    $img = new Imagick(realpath($src));

    она на выходе после строк:
    $img->getimageblob(); или $img->writeimage($filename);

    становиться размером 6,8 Кб.

    Перепробовал setImageCompression = COMPRESSION_NO и setImageCompressionQuality = 100.
    Без изменений. Притом, что COMPRESSION_NO, что COMPRESSION_JPEG - качество и размер одинаковый. Хотя библиотека работает в плане изменения размера. В чем может быть проблема? Кто сталкивался с такой ситуацией?

    Почему так? Почему нельзя работать с оригиналом картинки? Почему Imagick сжимает ее еще в конструкторе?

    PHP 5.4 и Imagick 3.1.2.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    качество при этом меняется? им может тупо оптимизировать изображение удаляя из него всякие превьюшки и эксифы. опять же глядя на размерность выходного изображения он может принимать решение об оптимизации без потери качества. то есть сам факт изменения размера файла изображения еще не говорит о том что изображение стало хуже. и оптимизация отлично работает до некоторого размера изображения. несколько лет назад сравнивал поведение гд и им - им всегда выдавал более красивое изображение при значительно меньшем размере файла. но превьюшки типа 50*50 были по размеру больше чем исходный файл таких же размерностей - тут оптимизатор явно лажал.
     
  3. dj-sphinx

    dj-sphinx Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Да да... Вот в этом то и проблема - сильно искажает картинку. Я наоборот, рад что сжимает :) - это отлично! Но вот качество теряет картинка сильно, реально плохо выглядит даже не вооруженным взглядом. Я вот и не знаю, что и делать. Мне качество важно!
    В итоге мне надо получить туже картинку без потери качества, но изменить размеры.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    может быть какой-то баг в расширении. я с ним не знаком ибо пользуюсь консольной версией им. попытка выполнить утилиту convert даст тот же результат?
     
  5. dj-sphinx

    dj-sphinx Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Не пробовал. А как средствами PHP изменить размеры и вернуть blob image (не сохраняя в файл результат) для дальнейшей работы с ним, подскажите, пожалуйста?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну средствами пхп это следовательно средствами гд или им. больше вроде для растра ничего и нет. изменить размеры это вы в мануал по инструменту посмотрите. я консольную версию использую и там это делается например так
    Код (Text):
    1. convert from.jpg -resize 100x100^ -quality 80 -interlace Plane to.jpg
    - вписывает изображение в квадрат со стороной 100. то есть 100 будет бОльшая сторона исходного изображения. качество ставится 80% жпг - от 80 до 100 почти нет заметной глазу разницы кроме кол-ва нулей в размере файла. интерлейс ставится прогрессивный - изображение будет на медленном канале загружаться не сверху вниз а с постепенным приростом качества - сначала мыло, потом четче, еще четче и так далее пока не будет готов весь файл. прогрессивная развертка чуть больше по размеру файла но позволяет не дожидаться загрузки файла - образ различимый человеку готов за 3-4 этапа до конца загрузки.

    вот еще пример консольной команды
    Код (Text):
    1. convert from.jpg -resize 100x100^ -gravity center -crop 100x100+0+0 -interlace Plane to.jpg
    сначала приводит изображение к 100 по малой стороне а потом вырезает квадрат 100*100 из середины то есть равномерно отступив по бОльшей стороне.

    что там в расширении сделали - не смотрел. на консоль ушел еще во времена когда расширение носило экспериментальный характер и падало и мемликалось после каждого обработанного пиксела.
     
  7. dj-sphinx

    dj-sphinx Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Ganzal спасибо за помощь. По результатам отпишусь. Может кому интересно будет :)
     
  8. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Я тоже не юзаю эти пыхоклассы для имагика. Тупо команды в exec и всё нормально всегда было
     
  9. dj-sphinx

    dj-sphinx Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Мои претензии к Imagick сняты :). Оказалось, что это сам веб сервер сжимает content image/jpeg до такого состояния. А сам imagick сжимает но не значительно из 23,2 Кб до 20,8 Кб.
     
  10. dj-sphinx

    dj-sphinx Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Вообщем, проблема была в строке выдачи изображения в браузер
    imagejpeg($image);
    По умолчанию, функция исползует качество на 75%.
    Поставил 100% и все ок. :)
    Тема закрыта.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Эта тема уже была. Лучше и правда закрыть.
     
Статус темы:
Закрыта.