Понадобилось сделать картинку с неровными краями, причем картинка должна быть именно прозрачной, вариант сделать белый фон не прокатывает. Самым логичным было бы использовать наложение маски как это можно сделать скажем во флеше... но...
Почему то в GD нет функций для работы с масками. Пришлось изобретать самим, и вот что получилось:

Так выглядит код маскирования:
<?php
$image = imagecreatefromgif('image.gif');
$mask = imagecreatefromgif('mask.gif');
$dest = imagecreatetruecolor(imagesx($image),imagesy($image));
imagemask($dest,$image,$mask);
header('Content-type: image/jpeg');
imagepng($dest);
?>Скопировать в буфер
Код самой функции маскирования:
<?php
function imagemask($dest,$image,$mask){
$width = imagesx($image);
$height = imagesy($image);
$tc = imagecolorallocate($dest,0,0,0);
imagecolortransparent($dest,$tc);
for($i=0;$i<$width;$i++){
for($j=0;$j<$height;$j++){
$c = imagecolorat($image,$i,$j);
$color = imagecolorsforindex($image,$c);
$c = imagecolorat($mask,$i,$j);
$mcolor = imagecolorsforindex($mask,$c);
if (!($mcolor['red']==255 && $mcolor['green']==255 && $mcolor['blue']==255)){
$c = imagecolorallocate($dest,$color['red'],$color['green'],$color['blue']);
imagesetpixel($dest,$i,$j,$c);
}
}
}
}
?>Скопировать в буфер
Источник: http://www.maxistar.ru/blog/key/PHP/.
© Copyright 2008-2012 by KDG