Задача: на лету обрезать изображение, чтобы оно было в кружочке.
Стандартная библиотека, идущая в комплекте с цмс-кой, обрезала. Но делала это не совсем кошерно. Обрезанную часть заполнян белый цвет. А нужно чтобы там была прозрачность.
Весь день ипался над прозрачным фоном, в конце вспомнил что у формата 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); }}