resize для прозрачного gif....

micolo

Новичок
resize для прозрачного gif....

Доброго времени суток!
У меня проблема при resize прозрачного gif'а. Как только я изменяю его размер - прозрачные области сразу меняют цвет на чёрный. Пытался пользоваться функцией imagecolortransparent, но ничего не получается. Вот код. Моэет кто знает в чём тут дело.
PHP:
$f="test.gif";
$src = imagecreatefromgif($f);
$w_src = imagesx($src);
$h_src = imagesy($src);


header("Content-type: image/gif");

       $ratio = $w_src/$w;
       $w_dest = round($w_src/$ratio);
       $h_dest = round($h_src/$ratio);


       $dest = imagecreatetruecolor($w_dest,$h_dest);
      $black = ImageColorAllocate ($dest, 0, 0, 0);
      imagecolortransparent($dest, $black);

       imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
   

        imagegif($dest);
        imagedestroy($dest);
        imagedestroy($src);
 

micolo

Новичок
спасибо за ссылки:)

на самом деле проблема решилась - с использование imagetruecolortopalette прозрачность появилась, но на границе между цветом и прозрачность, если идёт какой нить градиен смешанного цвета - появляются левые пикселы и картинка выглядит очень погано. На сколько я понимаю, эта проблема со смешанными цветами на границе с прозрачностью останется нерешаемой и придётся прибегнуть не к программному resize, а через фотошоп....:(
 

hermit_refined

Отшельник
micolo
Хм... а на что вы вообще надеетесь, создавая gif с помощью imagecreatetruecolor() - а не imagecreate() ?..
 

micolo

Новичок
просто во всех примерах по resize прозрачного gif'а которые я нашёл был прописано именно imagecreatetruecolor, а не imagecreate....
а что есть другие варианты? если есть то подскажите плз....
 

micolo

Новичок
Автор оригинала: hermit_refined
micolo
Например, в приведённом вами изначально коде стереть "truecolor".
ну убрал я "truecolor"...
всё осталось по прежнему..
может есть рабочий кусок кода....
 

hermit_refined

Отшельник
32 пикселя - это здорово. При таком уменьшении хорошего ждать не приходится.
Но - у этой картинки - окантовка черная, потому вполне катит (и лучше подходит) вариант с imagecreatetruecolor() + imagetruecolortopalette() - по краям чёрные пиксели не будут заметны, а переходы будут гладкими. Так же проходит и любая другая картинка с окантовкой одного цвета (только надо чёрный в созданной картинке на соответствующий цвет заменить перед копированием).

А вот в общем случае - надо создавать с помощью imagecreate() и мириться с тем что есть (желательно уменьшать умеренно всё-таки). Альтернатива (лучшая) - играться с ImageMagick.

P.S. И ещё нюанс - если исходное изображение 142, предпочтительнее ресайзить, например, до 35, а не до 32.
 
Сверху