PHP의 GD 라이브러리를 사용하여 이미지를 처리 할 때 많은 개발자가 그러한 혼란을 겪게됩니다.
" imagecolorallocatealpha () 로 투명한 색상을 분명히 설정했습니다. 왜 마지막 PNG 파일이 완전히 불투명하게 저장됩니까?"
이 문제를 신중하게 분석하고 올바른 솔루션을 찾으십시오.
먼저 다음과 같은 코드를 썼다고 가정 해 봅시다.
<?php
$width = 200;
$height = 100;
// 진정한 색상 이미지를 만듭니다
$image = imagecreatetruecolor($width, $height);
// 투명성으로 색상을 할당하십시오
// 매개 변수 순서:R, G, B, Alpha(0 완전히 불투명합니다,127 완전히 투명합니다)
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);
// 이 색상으로 배경을 채우십시오
imagefill($image, 0, 0, $transparentColor);
// AS를 저장하십시오 PNG
imagepng($image, 'output.png');
// 자원을 파괴하십시오
imagedestroy($image);
?>
빨간색 배경에서 완전히 투명한 PNG 이미지를 생성 할 것으로 예상되지만 파일을 열면 배경이 빨간색 불투명하다는 것을 알 수 있습니다.
왜?
GD 라이브러리의 imagecolorallocatealpha () 에는 알파 정보가 포함 된 색상이 지정되어 있지만 PNG 파일을 저장할 때 GD가 자동으로 알파 채널을 유지한다는 의미는 아닙니다.
PNG에 투명성 정보를 올바르게 저장하려면 두 가지를 명시 적으로 활성화해야합니다.
<br> 를 저장하려면 알파 채널을 켜십시오 PNG를 저장할 때 GD 라이브러리에 알파 채널을 포함하도록 GD 라이브러리에 알리고 imagesAvealpha ($ image, true)를 사용하십시오.
알파 믹스를 끄십시오 (선택 사항이지만 권장)
이미지 픽셀을 조작 할 때 ImagealphableDing ($ image, false)을 사용하여 색상을 잘못 혼합하지 않도록하십시오.
<?php
$width = 200;
$height = 100;
// 진정한 색상 이미지를 만듭니다
$image = imagecreatetruecolor($width, $height);
// 폐쇄 alpha 혼합(투명한 배경을 올바르게 저장합니다)
imagealphablending($image, false);
// 저장을 활성화하십시오 alpha 채널 정보
imagesavealpha($image, true);
// 分配一个완전히 투명합니다的红色
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);
// 이 색상으로 배경을 채우십시오
imagefill($image, 0, 0, $transparentColor);
// AS를 저장하십시오 PNG
imagepng($image, 'output.png');
// 또는 웹 페이지에 저장하여 직접 출력하십시오
// header('Content-Type: image/png');
// imagepng($image);
// 자원을 파괴하십시오
imagedestroy($image);
?>
이 코드는 투명한 빨간색 배경으로 PNG 이미지를 생성합니다.
PHP에서 imagecolorallocatealpha () 로 투명한 색상을 설정하지만 저장된 PNG는 불투명하다면, 일반적으로 잊어 버리기 때문입니다.
? ImageAlphableending 사용 ($ image, false)
? imagesAvealpha ($ image, true) 사용
이 두 단계는 투명한 PNG 보존의 핵심입니다.