Я пытаюсь обрезать квадратное изображение и объединить его с маркером, но я не могу сделать изображение с обведенным кругом прозрачным.
Когда вы сохраняете изображение круга в формате PNG, оно показывает ОК с прозрачными углами, но когда я открываю его в Photoshop, оно имеет белый цвет по углам, как на последнем изображении ниже.
вот код, который я использую:
//SAVED THE CIRCLE PNG IMAGE
$width = 320;
$height = 320;
$img1 = '';
switch($fileExt){
case '.png':
$img1 = ImageCreateFrompng($img= $image_config['new_image']);
break;
case '.jpg':
$img1 = ImageCreateFromjpeg($img= $image_config['new_image']);
break;
case '.gif':
$img1 = ImageCreateFromgif($img= $image_config['new_image']);
break;
}
$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($img1, $img2, 0, 0, 0, 0, $x, $y, 100);
imagecolortransparent($img1, $bg);
header("Content-type: image/png");
imagepng($img1, './img/deviceImg/pin'.$datetime.'.png');
imagedestroy($img2); // kill mask first
imagedestroy($img1); // kill canvas last
//MERGING IT WITH THE PIN
$width = 320;
$height = 320;
$image_1 = imagecreatefrompng('./img/deviceImg/pin.png');
imagesavealpha($image_1, true);
imagealphablending($image_1, true);
$image_2 = imagecreatefrompng('./img/deviceImg/pin'.$datetime.'.png');
imagesavealpha($image_2, true);
imagealphablending($image_2, true);
imagecopy($image_1, $image_2, 40, 22, 0, 0, $width, $height);
imagepng($image_1, './img/deviceImg/pinASD'.$datetime.'.png');
Прозрачность копируется только с imagecopymerge (), не imagecopy (). Итак, ваша предпоследняя строка:
imagecopy($image_1, $image_2, 40, 22, 0, 0, $width, $height);
Должен быть изменен на:
imagecopymerge($image_1, $image_2, 40, 22, 0, 0, $width, $height, 100);
Обратите внимание на дополнительный параметр (pct
) в конце. Согласно инструкции:
Два изображения будут объединены в соответствии с pct, который может варьироваться от 0 до 100. Когда pct = 0, никаких действий не предпринимается, когда 100 эта функция ведет себя идентично imagecopy () для изображений на паллетах, за исключением игнорирования альфа-компонентов, в то время как она реализует альфа-прозрачность для настоящих цветных изображений.
Других решений пока нет …