Задача: на лету обрезать изображение, чтобы оно было в кружочке.
Стандартная библиотека, идущая в комплекте с цмс-кой, обрезала. Но делала это не совсем кошерно. Обрезанную часть заполнян белый цвет. А нужно чтобы там была прозрачность.
Весь день ипался над прозрачным фоном, в конце вспомнил что у формата jpeg нет и не может быть альфа-канала блеать. Нужно для начала в png сконвертировать штоле =)
UPD: После мучений, когда уже немного начал понимать как работать с gd, в интернетах был найден способ взять изображение, засунуть его в круг и сделать обрезанные края прозрачными.
UPD2: Добавлено сглаживание изображения. Сглаживание достигается масштабированием.
Вот она, рыба моей мечты:
function img_circle($file_name = false, $param = 20){
$err = true;
$image = imagecreatefromjpeg($file_name);
$inCore = cmsCore::getInstance();
$cfg = $inCore->loadComponentConfig('users');
$width=$cfg['medw'];
$height=$cfg['medh'];
if($image){
$err = false;
}
if(!$err){
$x=$width ;
$y=$height;
$img2 = imagecreatetruecolor($x, $y);
$bg = imagecolorallocate($img2, 255, 255, 255);
imagefill($img2, 0, 0, $bg);
$e = imagecolorallocate($img2, 0, 0, 0);
$r = $x <= $y ? $x : $y;
imagefilledellipse($img2, ($x/2), ($y/2), $r, $r, $e);
imagecolortransparent($img2, $e);
imagecopymerge($image, $img2, 0, 0, 0, 0, $x, $y, 100);
imagecolortransparent($image, $bg);
$W=$cfg['medw'];
$H=$cfg['medh'];
// Исходный код построения карты России пропущен.
// Смотрите урок №8
$img3=imagecreatetruecolor($W/2,$H/2);
imagecolortransparent($img3, $bg);
imagecopyresampled($img3,$image,0,0,0,0,$W/2,$H/2,$W,$H);
header("Content-type: image/png");
imagepng($img3, $file_name);
imagedestroy($img2);
imagedestroy($img3);
imagedestroy($image);
}}