Обрезать круговое изображение и объединить с помощью маркера с прозрачным фоном

Я пытаюсь обрезать квадратное изображение и объединить его с маркером, но я не могу сделать изображение с обведенным кругом прозрачным.

Когда вы сохраняете изображение круга в формате 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');

0

Решение

Прозрачность копируется только с 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 () для изображений на паллетах, за исключением игнорирования альфа-компонентов, в то время как она реализует альфа-прозрачность для настоящих цветных изображений.

0

Другие решения

Других решений пока нет …