2009-12-04
Маска, маска я тебя знаю
Понадобилось сделать картинку с неровными краями, причем картинка должна быть именно прозрачной, вариант сделать белый фон не прокатывает. Самым логичным было бы использовать наложение маски как это можно сделать скажем во флеше... но...
Почемуто в GD нет функций для работы с масками. Пришлось изобретать самим, и вот что получилось:
Так выглядит код маскирования:
$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);
Код самой функции маскирования:
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); } } } }
Правда расстраивает, что GD так и не научилась работать нормально с полупрозрачностью - если кто знает способ, расскажите плиз.
разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться
комментарии: