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 - остальные будут безжалостно удаляться
комментарии: