ОБработка изображений — цифрят почему-то

Статус
В этой теме нельзя размещать новые ответы.

Albert22

Старатель
Регистрация
30 Мар 2008
Сообщения
270
Реакции
11
Всем привет.
Скрипт принимает и сохраняет изображение.
В результате оно цифрит почему-то (примеры во вложении, оригинал и уменьшенное). Третьим вложил то же самое изображение, но уменьшенное Фотошопом.
Что с этим делать?
Вот как мне кажется наиболее ответственный за это всё кусок кода:
PHP:
$dest = @imagecreatetruecolor($nwidth,$nheight);
if (!$dest) {die();}
    if(strpos($type, 'q')){ // если запрошено квадратное изображение
        if ($size[0]>$size[1]) {
            imagecopyresized($dest, $src, 0, 0,
            round((max($size[0],$size[1])-min($size[0],$size[1]))/2),
            0, $nwidth, $nwidth, min($size[0],$size[1]), min($size[0],$size[1]));
        }
        if ($size[0]<$size[1]) {
            imagecopyresized($dest, $src, 0, 0, 0, 0, $nwidth, $nwidth,
            min($size[0],$size[1]), min($size[0],$size[1]));
        }
        if ($size[0]==$size[1]) {
            imagecopyresized($dest, $src, 0, 0, 0, 0, $nwidth, $nwidth, $size[0], $size[0]);
        }
    } else {
        imagecopyresized($dest, $src, 0,0,0,0, $nwidth, $nheight, $size[0], $size[1]);
    }


$bg=imageColorAllocate($dest, 255,255,255);
imageColorTransparent($dest, $bg);
 

Вложения

  • m_66.jpg
    m_66.jpg
    2,9 KB · Просмотры: 28
  • o_66.jpg
    o_66.jpg
    19,6 KB · Просмотры: 5
  • m-2_66.png
    m-2_66.png
    5,6 KB · Просмотры: 29
Всем привет.
Скрипт принимает и сохраняет изображение.
В результате оно цифрит почему-то (примеры во вложении, оригинал и уменьшенное). Третьим вложил то же самое изображение, но уменьшенное Фотошопом.
Что с этим делать?
Вот как мне кажется наиболее ответственный за это всё кусок кода:
PHP:
$dest = @imagecreatetruecolor($nwidth,$nheight);
if (!$dest) {die();}
    if(strpos($type, 'q')){ // если запрошено квадратное изображение
        if ($size[0]>$size[1]) {
            imagecopyresized($dest, $src, 0, 0,
            round((max($size[0],$size[1])-min($size[0],$size[1]))/2),
            0, $nwidth, $nwidth, min($size[0],$size[1]), min($size[0],$size[1]));
        }
        if ($size[0]<$size[1]) {
            imagecopyresized($dest, $src, 0, 0, 0, 0, $nwidth, $nwidth,
            min($size[0],$size[1]), min($size[0],$size[1]));
        }
        if ($size[0]==$size[1]) {
            imagecopyresized($dest, $src, 0, 0, 0, 0, $nwidth, $nwidth, $size[0], $size[0]);
        }
    } else {
        imagecopyresized($dest, $src, 0,0,0,0, $nwidth, $nheight, $size[0], $size[1]);
    }
$bg=imageColorAllocate($dest, 255,255,255);
imageColorTransparent($dest, $bg);
Не вглядываясь в код, скажу - просто посмотри размер рисунков, полученный скриптом 100х27, а фотошопом 100х28. Попробуй с пропорцей округления поколдовать, на малых числах уже 1пх потерялся, а это плохо.
 
Изменил рассчитывающую высоту формулу, поставил ceil();
Теперь высота 28px.
К сожалению, не помогло:
 

Вложения

  • m_66.jpg
    m_66.jpg
    3,3 KB · Просмотры: 26
если надо чтоб картинка была сглаженная при изменении размера надо вместо imagecopyresized использовать функцию imagecopyresampled
 
Абсолютное спасибо!
Так и есть, правда ссылка битая. Вот рабочая:
Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху