За последние 24 часа нас посетили 9806 программистов и 861 робот. Сейчас ищет 371 программист ...

изменение размера с сохранением качества

Тема в разделе "Обработка изображений средствами PHP", создана пользователем SibBear, 1 май 2020.

  1. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    какими средствами можно уменьшить картинку по размеру при этом сохранить качество?
    есть картинка 800х800, ее нужно программно сжать до 250х250
    пробовал стандартный resize
    пробовал wideimage
    получается отвратное качество
    не пробовал imagic - не смог пока настроить на локале, попробую на живом хосте.

    фактически я понимаю что ее нужно "уплотнить", сделать размер 250 но увеличить количество пикселей вместо 100 у оригинала в например 200 на уменьшенном... какие средства такое умеют?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.420
    Симпатии:
    657
    Адрес:
    Татарстан
    1. Какая картинка? Формат графический
    2. Что в вашем понимании - сохранение качества?
    3. Стандартный resize имеется ввиду gd2 библиотека?
    Покажите примеры вашего кода?
     
  3. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    1 картинка jpg, 96dpi
    2 в моем понимании сохранение качества это отсутствие жуткой размытости в маленькой картинке при приближении.
    мне даже интересно стало как браузер "впихивает" картинку в размер 250х250 при задании простого css whidth/height. Он же берет исходную, сжимает ее в размер по при этом сохраняет количество точек? и если приближать ее то качество видим хорошее.
    то есть в моем понимании (тут поправьте) мне нужно создать картинку 250х250 ~250dpi и в нее впихнуть исходник...
    Вот какой функцией можно задать разрешение картинки?
    3 стандартный да, GD2, и wideimage
    - imagecopyresampled() из примера официальной документации - код стер ибо совсем получается печально даже с качеством 100
    - wideimage :: load($this_img) -> resize($img_width, $img_height, $img_rule) -> saveToFile("wide".$new_name); - тут немного симпотичнее но далеко от приличия

    imagick запустил на сервере, но тоже не айс, как блин количество точек задать :mad:
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.993
    Симпатии:
    759
    т е Вы надеетесь на фуллХД мониторе увеличить картинку 250х250 и увидеть четкое изображение?
    изображение 250х250 может быть качественным, только если занимает на экране 250х250 px
     
  5. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    я надеюсь что понятие ширина и количество точек в этой ширине ppi это разные вещи и этим можно оперировать )))

    зря надеюсь? )))
    как браузер "впихивает" картинку в масштаб? если приближаешь картинку он же не предлагает тебе при каждом приближении картинку уменьшенную от исходника на 10% меньше чем превьюшка 250х250 пока не дойдет до 800х800 ?
     
  6. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    упрощаем задачу. Как уменьшить изображение, при этом получить качество идентичное масштабированному браузером?
    есть две картинки 2.jpg 800х800 и уменьшенная 2-2.jpg
    Код (Text):
    1.  
    2. echo "<img src='2.jpg' style='width: 260px; height: 260px;'>";
    3. echo "<img src='2-2.jpg'>";
    2-2.jpg уменьшалась несколькими способами, уже и imagic разные варианты пробую
    и все равно две картинки рядом сильно отличаются друг от друга, особенно это видно если на картинке текст какой то есть
    1 - исходный вжатый в стили, далее 4 разных варианта imagic

    3.jpg

    наиболее симпотично получился тортик второй справа, это обычный имагик ресайз с фильтром Ланцоша (слово то какое, прям ка левиоса)))
    но исходник удачный, на картинках где качество исходника выше в 3 и более раз вообще треш...
     
    #6 SibBear, 2 май 2020
    Последнее редактирование: 2 май 2020
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.420
    Симпатии:
    657
    Адрес:
    Татарстан
    Главная ошибка в понимании п 2.

    Прочтите что такое dpi. Если у вас 96dpi, никто не сможет чудесным образом сделать из нее 300dpi.
    Любой браузер при увеличении картинки больше ее реальных размеров обязательно ухудшает качество, как и любой просмотрщик графических файлов. Чудес не бывает...

    Другое дело - что возможно вы вообще не с той стороны к проблеме подходите. Вы опишите конкретно что вы хотите?
     
  8. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    я выше уже наглядно показал в чем задача

    мы не увеличиваем картинку, я не прошу браузер или php увеличить мне картинку и сделать еще и качественной. Я прошу ее уменьшить и что бы качество было идентичное тому, как делает это браузер загоняя картину в style
     
    #8 SibBear, 2 май 2020
    Последнее редактирование: 2 май 2020
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.494
    Симпатии:
    1.261
    Адрес:
    Лень
    Вам нужно смотреть в сторону векторных изображений
     
    SibBear нравится это.
  10. moderator

    moderator Новичок

    С нами с:
    1 май 2020
    Сообщения:
    3
    Симпатии:
    3
    svg хорошо сохраняет качество
     
    ADSoft нравится это.
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.420
    Симпатии:
    657
    Адрес:
    Татарстан
    1. Для gd2, для jpg можно выставлять параметр качества, по умолчанию вроде на 75% стоит, поставьте 100
    2. Браузер "загоняя в styke" ничего не делает с картинкой физически, просто масштабирует
    3. Для векторных изображений нет понятия качества, там масштабирование в принципе хоть до ьесконечности
     
  12. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    мысль хорошая, только на сколько я понял в ходе экспериментов, тот же imagic не делает вектора из jpg, он всего то меняет формат файла с jpg на svg. Я могу тем же корелом растрировать jpg получить svg и с ним уже играться, результат уже интереснее по четкости картинки. А вот как это с помощью php можно сделать не соображу (((
    короче: идеальное враг хорошего... пока более менее подходит вариант с ресайз имагик ланцош. Буду делать дальше то, что идет, а по конверту если придут дальше мысли вернусь к функции..
    Спасибо!
    --- Добавлено ---
    вот еще момент, объясните плиз по imagick

    $im->setImageCompressionQuality(100);
    $im->setImageCompressionQuality(80);
    $im->setImageCompressionQuality(70);

    если их делать последовательно до уничтожения $im, как он делает, % от оригинала, или % от предыдущего? тоесть в последней строке 70% будут от исходника, или от 80% ?
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.420
    Симпатии:
    657
    Адрес:
    Татарстан
    Установка текущих параметров вообще не преобразовывает ничего, просто устанавливает