GD kullanılarak arka plan görüntüsü ile Şeffaflık

1 Cevap php

Katı bir rengi ile şeffaf png doldurmak için GD2 kullanarak, burada benim kod ve sonucudur. Temelde kısa sürede şeffaflık başlar, dolgu rengi yerine şeffaflık ile karıştırma aniden durur.

private function GenerateImage()
{
	$original = imagecreatefrompng($this->ImagePath());

	$x = imagesx($original);
	$y = imagesy($original);

	$image = imagecreate($x,$y);

	imagealphablending($image,false);
	imagesavealpha($image,true);

	imagecopyresampled($image,$original,0,0,0,0,$x,$y,$x,$y);

	$colour = imagecolorallocate($image,$this->RGB[0],$this->RGB[1],$this->RGB[2]);
	imagefill($image,0,0,$colour);

	return imagepng($image,$this->GeneratedPath());

	imagedestroy($original);
	imagedestroy($image);
}

Orijinal görüntü:

alt text

Elde edilen görüntü:

alt text

1 Cevap

Ben şeffaf görüntü renk üstünde görünür olması için çalışıyoruz, sonra eğer görüntü kopyalamak sonra ilk doldurmak gerekir, bunu da yanlış şekilde gidiyoruz düşünüyorum.

Eğer şeffaflık ile çalışıyorsanız Ayrıca () imagecreatetruecolor aramak gerekir; yerine imagecreate of ();

private function GenerateImage()
{
        $original = imagecreatefrompng($this->ImagePath());

        $x = imagesx($original);
        $y = imagesy($original);

        $image = imagecreatetruecolor($x,$y);

        imagealphablending($image,true);
        imagesavealpha($image,true);

        $colour = imagecolorallocate($image,$this->RGB[0],$this->RGB[1],$this->RGB[2]);
        imagefill($image,0,0,$colour);

        imagecopyresampled($image,$original,0,0,0,0,$x,$y,$x,$y);

        return imagepng($image,$this->GeneratedPath());

        imagedestroy($original);
        imagedestroy($image);
}

Eğer resmin üstüne kırmızı çizmek için çalışıyorsanız o zaman yerine imagefill arasında imagefilledrectangle () () kullanın. Nedense imagefill asetatlarda iyi çalışmak için görünmüyor.

// Replace
imagefill($image,0,0,$colour);
// With
imagefilledrectangle( $image, 0,0, $x,$y,$colour);