Какие есть либы для работы с img в php

Inviseble_Demon

Мой дом здесь!
Регистрация
11 Дек 2008
Сообщения
478
Реакции
377
Столкнулся с проблемой качества картинки после обработки изображения (увеличение).
Использовал GD
Может... хотя наверно точно имеются другие либы у которых качество на выходе будит лучше. Просто при увеличении программой качество раза в 2-3 лучше...
Увеличение не такое уж и сильное..... примерно 20%
 
imagemagick попробуй, на выходе качество лучше чем у gdlib
 
Код! Код! Код!
Мы ж тут не сусликами меряемся!
Где ваш код, после которого изображение теряет в качестве по сравнению с программой?!
[telepatemode]
у функции Для просмотра ссылки Войди или Зарегистрируйся есть параметр отвечающий за качество выходящего изображения. аналогично у других аналогичных функций.
И вы скорее всего вызываете эту функцию не передавая параметра, и получаете качество по умолчанию, которое для этой функции не является лучшим из возможных
[/telepatemode]
 
[telepatemode] у функции Для просмотра ссылки Войди или Зарегистрируйся есть параметр отвечающий за качество выходящего изображения. аналогично у других аналогичных функций. И вы скорее всего вызываете эту функцию не передавая параметра, и получаете качество по умолчанию, которое для этой функции не является лучшим из возможных [/telepatemode]
я осведомлен о том, что по умолчанию функция imagejpeg сохраняет изображение с потерей качества в 25%, так же хочу заметить, что использование библиотеки GD не ограничивает разработчика одной лишь только imagejpeg, есть еще imagepng, imagegif итп.. в которых нет параметра отвечающего за качество. Также, следует иметь ввиду, что GD ориентирована на динамическое создание изображений - различные счетчики, капчи итп и поэтому генерация изображения в GD почти в 30 раз быстрее чем в imagemagic. Напротив, imagemagic больше используется именно для работы с изображениями - ресайз, наложение эфектов, и например, изменение размеров в imagemagic происходит быстрее, а также он поддерживает больше типов изображений.. замеры по скорости не мои, прочитал не мало инфы когда не так давно знакомился и выбирал библиотеку под свои нужды. + ко всему, код imagemagec компактнее.
в интернете полно примеров и сравнений, как этих двух библиотек, так и качества получаемых картинок.. не хочу заниматься копи-пастом, а своего готового кода, для наглядного сравнения этих библиотек у меня нет. но я могу его написать, так сказать - разберемся вместе :D
 
Для просмотра ссылки Войди или Зарегистрируйся
Я конечно познал только минимальные азы в PHP но не на столько что бы не знать о изменении качества при генерации картинки!
Если так жаждиш кода то вот он.

Ресайз картинки под квадрат (изначально был пропорциональный который быстро перековеркал под квадрат не искожая пропорции а обрезая)
PHP:
function SetImgSize($img, $width, $height, $file='')
{
    if (!is_file($img)) return false;
    $mime=getimagesize($img);
    $r=str_replace('image/', '', $mime['mime']);
 
    switch ($r)
    {
        case "gif":        {$srcImage = ImageCreateFromGIF($img); break;}
        case "png":        {$srcImage = ImageCreateFromPNG($img); break;}
        case "jpeg":    {$srcImage = ImageCreateFromJPEG($img); break;}
        case "jpg":        {$srcImage = ImageCreateFromJPEG($img); break;}
    }
 
    $srcWidth  = ImageSX($srcImage);
    $srcHeight = ImageSY($srcImage);
 
    $dest = imagecreatetruecolor($width, $width);
 
    if ($srcWidth>$srcHeight)
    ImageCopyResampled($dest, $srcImage, 0, 0,
    round((max($srcWidth,$srcHeight)-min($srcWidth,$srcHeight))/2),
    0, $width, $width, min($srcWidth,$srcHeight), min($srcWidth,$srcHeight));
 
    if ($srcWidth<$srcHeight)
    ImageCopyResampled($dest, $srcImage, 0, 0, 0, 0, $width, $width,
    min($srcWidth,$srcHeight), min($srcWidth,$srcHeight));
 
    if ($srcWidth==$srcHeight)
    ImageCopyResampled($dest, $srcImage, 0, 0, 0, 0, $width, $width, $srcWidth, $srcWidth);
 
    switch ($r)
    {
        case "gif":        {$srcImage = ImageGIF($dest, $file, 90); break;}
        case "png":        {$srcImage = ImagePNG($dest, $file, 9); break;}
        case "jpeg":    {$srcImage = ImageJPEG($dest, $file, 90); break;}
        case "jpg":        {$srcImage = ImageJPEG($dest, $file, 90); break;}
    }
 
    @ImageDestroy($srcImage);
    @ImageDestroy($resImage);
 
    return true;
}

есть еще imagepng, imagegif итп.. в которых нет параметра отвечающего за качество.
Почему же нету... Он имеется, только для png немного другой...
 
PS. Ставить качество 100 - бред полный прироста в качестве нету а размер бешеный по сравнению с 90.
 
Почему же нету... Он имеется, только для png немного другой...
сейчас посмотрел, все верно ты написал, скорее всего в поисках хороших примеров я читал описание данных функций не с официального сайта и видимо автор упустил этот момент или я недочитал..
я пользуюсь данной библиотекой для наложения текста на белый фон, поэтому не озадачивался вопросом качества изображения ибо и так все норм :)
 
Я сменил GD на ImageMagick качество заметно лучше, при эктраполировании доступна дюжина фильтров, размер изображения в итоге получается меньше, чёткость выше.
 
Для просмотра ссылки Войди или Зарегистрируйся
Проблема в том что картинку мне нужно из прямоугольника 200X180 сделать квадратом 200X200 так что я увеличиваю и обрезаю... Качество тут то и падает... (размеры другие это просто пример).
 
Назад
Сверху