현재 위치: > 최신 기사 목록> ImageColallocatealpha () 함수를 사용할 때 ImagesAvealpha ()를 활성화하는 것을 잊어 버리는 이유는 투명성의 상실로 이어 집니까?

ImageColallocatealpha () 함수를 사용할 때 ImagesAvealpha ()를 활성화하는 것을 잊어 버리는 이유는 투명성의 상실로 이어 집니까?

M66 2025-06-23

이미지 처리에 PHP를 사용할 때 GD 라이브러리는 imagecolorallocatealpha ()가 투명성이있는 색상을 할당하는 기능인 많은 강력한 기능을 제공합니다. 그것을 사용할 때, 많은 개발자들은 투명한 색상이 할당 되더라도 저장된 PNG 또는 GIF 파일은 여전히 ​​완전히 불투명하다는 것을 알게됩니다. 이게 왜? 문제의 열쇠는 쉽게 간과되는 다른 함수에 있습니다 : ImagesAvealpha () .

1. imagecolorallocatealpha () 이해

imagecolorallocatealpha () 의 기본 사용은 다음과 같습니다.

 $image = imagecreatetruecolor(200, 200);
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127); // 빨간색,완전히 투명합니다

매개 변수에는 빨간색, 녹색, 파란색 및 투명성이 포함됩니다 (0 ~ 127, 0은 완전히 불투명하며 127은 완전히 투명한 것을 의미합니다). 이 기능을 사용하면 반투명 사각형, 텍스트 등과 같은 이미지에 투명 요소를 그릴 수 있습니다.

그러나이 기능은 색상을 할당하는 데만 책임이 있으며 GD 라이브러리에 "이미지를 출력 할 때 알파 채널을 유지하십시오"라고 자동으로 알리지 않습니다.

2. ImagesAvealpha ()가 필요한 이유

이것은 imagesavealpha () 가하는 일입니다.

 imagesavealpha($image, true);

이 기능을 호출 할 때 GD 라이브러리는 PNG (또는 투명성을 지원하는 다른 형식)를 출력 할 때 알파 채널의 데이터를 보유합니다. 활성화되지 않은 경우 GD는 기본적으로 알파 (일반적으로 검은 색 또는 흰색)가없는 배경으로 투명 영역을 채우고, 실패로 할당 된 투명한 색상을 유발하고 저장된 이미지는 완전히 불투명 해 보입니다.

다시 말해서:
? imagecolorallocatealpha () → 색상의 투명 부분을 정의합니다
?? 그러나 파일에 투명한 정보를 자동으로 유지하지는 않습니다. → imagesAvealpha ()를 수동으로 호출해야합니다.

3. 완전한 예

간단한 예를 살펴 보겠습니다.

 <?php
// 캔버스를 만듭니다
$image = imagecreatetruecolor(200, 200);

// 열려 있는 alpha 채널 절약
imagesavealpha($image, true);

// 创建一个완전히 투명합니다的背景色
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);

// 배경을 채우십시오
imagefill($image, 0, 0, $transparent);

// 画一个半透明的빨간색矩形
$red = imagecolorallocatealpha($image, 255, 0, 0, 63);
imagefilledrectangle($image, 50, 50, 150, 150, $red);

// 출력 이미지
header('Content-Type: image/png');
imagepng($image);

// 무료 메모리
imagedestroy($image);
?>

ImagesAvealpha ($ image, true) 라인을 제거하면 저장된 PNG 파일의 투명 영역이 직접 손실되며 검은 색 배경이있는 빨간색 사각형처럼 보입니다.

4. 파일 저장의 예

이미지를 브라우저에 출력하는 대신 파일로 저장하려면 다음을 수행 할 수 있습니다.