Я искал здесь в SO решения для моей проблемы, но я не могу найти решение, которое, кажется, работает для меня. Может я что-то не так делаю.
Я объединяю несколько прозрачных PNG-изображений в один дисплей для клиента. Есть почти три слоя (очевидно, фон прозрачный, затем довольно прямоугольные PNG, но немного не квадратные, а затем более мелкие).
Верхний слой меньших изображений красиво идет по прямоугольникам. Но прямоугольники выглядят так, как если бы они были сначала закрашены черным, а затем применено изображение - вы можете видеть это, потому что изображение немного не квадратное, поэтому на краях обычно есть черная линия вокруг него. Я не понимаю, почему этот слой имеет его, а не верхний - оба изображения создаются с одним и тем же кодом.
Вот мой код (где-то я нашел функцию imagecopymerge_alpha, и, кажется, она работает довольно хорошо, но, очевидно, не совсем).
// Merging:
$this->imagecopymerge_alpha($this->image, $resizedImage, $startX, $startY, 0, 0, imagesx($resizedImage), imagesy($resizedImage), 100);
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying relevant section from background to the cut resource
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// copying relevant section from watermark to the cut resource
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
// insert cut resource to destination image
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
// Creating the background/container image:
private function createTransparent($width, $height)
{
$image = imagecreatetruecolor($width, $height);
imagealphablending($image, false);
imagesavealpha($image, true);
$transparentColor = imagecolorallocatealpha($image, 255, 255, 255, 127);
imagefill($image, 0, 0, $transparentColor);
return $image;
}
Итак, мой вопрос таков: видите ли вы здесь что-нибудь, что заставило бы прозрачный PNG не поддерживать свою прозрачность и правильно слиться с базовым прозрачным PNG?