이미지 처리에 PHP를 사용할 때 GD 라이브러리는 imagecolorallocatealpha ()가 투명성이있는 색상을 할당하는 기능인 많은 강력한 기능을 제공합니다. 그것을 사용할 때, 많은 개발자들은 투명한 색상이 할당 되더라도 저장된 PNG 또는 GIF 파일은 여전히 완전히 불투명하다는 것을 알게됩니다. 이게 왜? 문제의 열쇠는 쉽게 간과되는 다른 함수에 있습니다 : ImagesAvealpha () .
imagecolorallocatealpha () 의 기본 사용은 다음과 같습니다.
$image = imagecreatetruecolor(200, 200);
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127); // 빨간색,완전히 투명합니다
매개 변수에는 빨간색, 녹색, 파란색 및 투명성이 포함됩니다 (0 ~ 127, 0은 완전히 불투명하며 127은 완전히 투명한 것을 의미합니다). 이 기능을 사용하면 반투명 사각형, 텍스트 등과 같은 이미지에 투명 요소를 그릴 수 있습니다.
그러나이 기능은 색상을 할당하는 데만 책임이 있으며 GD 라이브러리에 "이미지를 출력 할 때 알파 채널을 유지하십시오"라고 자동으로 알리지 않습니다.
이것은 imagesavealpha () 가하는 일입니다.
imagesavealpha($image, true);
이 기능을 호출 할 때 GD 라이브러리는 PNG (또는 투명성을 지원하는 다른 형식)를 출력 할 때 알파 채널의 데이터를 보유합니다. 활성화되지 않은 경우 GD는 기본적으로 알파 (일반적으로 검은 색 또는 흰색)가없는 배경으로 투명 영역을 채우고, 실패로 할당 된 투명한 색상을 유발하고 저장된 이미지는 완전히 불투명 해 보입니다.
다시 말해서:
? imagecolorallocatealpha () → 색상의 투명 부분을 정의합니다
?? 그러나 파일에 투명한 정보를 자동으로 유지하지는 않습니다. → imagesAvealpha ()를 수동으로 호출해야합니다.
간단한 예를 살펴 보겠습니다.
<?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 파일의 투명 영역이 직접 손실되며 검은 색 배경이있는 빨간색 사각형처럼 보입니다.
이미지를 브라우저에 출력하는 대신 파일로 저장하려면 다음을 수행 할 수 있습니다.