이미지 처리를 위해 PHP의 GD 라이브러리를 사용하는 경우 투명 층을 처리하는 것이 종종 두통입니다. 특히 imagecopy 또는 imagecopymerge 와 같은 함수를 사용하여 여러 층을 오버레이 할 때 투명 부분은 다른 층에 의해 쉽게 완전히 덮어 쓰여서 최종 복합 이미지가 투명도 효과를 잃게됩니다.
이 기사는 imagecolorallocatealpha 기능을 사용하여 층 간의 상호 오버레이로 인한 불투명 효과를 피하기 위해 투명성으로 색상을 합리적으로 할당하는 방법을 자세히 소개합니다.
imagecolorallocatealpha 는 GD 라이브러리가 이미지에 알파 (투명성) 정보로 색상을 할당하기 위해 제공되는 함수입니다. 기능 서명은 다음과 같습니다.
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
안에:
$ 이미지 : imageCreatetRueColor () 가 만든 이미지 리소스.
$ RED , $ GREEN , $ BLUE : RGB 구성 요소 (0-255).
$ Alpha : 투명성 (0은 완전히 불투명하고 127은 완전히 투명합니다).
배경 또는 채우기 색상에 투명한 색상을 할당하면 레이어를 병합 할 때 다른 레이어로 완전히 덮어 쓰는 것을 피할 수 있습니다.
두 개의 레이어가 있다고 가정합니다.
기본 이미지 (배경 이미지);
전경지도 (부분적으로 투명한 영역이있는 PNG).
GD가 기본적으로 알파 채널을 처리하지 않기 때문에 투명 영역은 전경 이미지를 오버레이하기 위해 imageCopy를 직접 사용하는 경우 투명 영역은 종종 검은 색으로 나타나거나 기본 이미지를 오버레이합니다.
주요 단계 :
1 ??? 알파 블렌딩을 활성화합니다
합성 전에 알파 블렌딩을 해제하십시오. 그렇지 않으면 GD가 알파 채널을 무시합니다.
imagealphablending($image, false);
2 ?? 투명한 색상을 할당 <br> imagecolorallocatealpha를 사용하여 배경에 완전히 투명한 색상을 할당하십시오.
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
3 ???? 알파 채널을 저장 <br> 합성 후 알파 채널을 저장하십시오. 그렇지 않으면 출력 PNG가 투명성 효과를 잃게됩니다.
imagesavealpha($image, true);
다음은 투명한 층을 덮어 쓰는 방법을 보여주는 완전한 PHP 예입니다.
<?php
// a 400x400 진정한 색 캔버스
$canvas = imagecreatetruecolor(400, 400);
// 폐쇄 alpha blending,투명한 배경을 채우기 위해
imagealphablending($canvas, false);
// 완전히 투명한 색상을 할당하십시오
$transparent = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
// 투명한 배경으로 캔버스를 채우십시오
imagefill($canvas, 0, 0, $transparent);
// 전경을 로딩합니다 PNG 그림(투명한 영역으로)
$foreground = imagecreatefrompng('https://m66.net/images/foreground.png');
// 캔버스의 전경을 오버레이하십시오
imagecopy($canvas, $foreground, 50, 50, 0, 0, imagesx($foreground), imagesy($foreground));
// 유지하다 alpha 채널 정보
imagesavealpha($canvas, true);
// 브라우저에 출력
header('Content-Type: image/png');
imagepng($canvas);
// 자원을 파괴하십시오
imagedestroy($canvas);
imagedestroy($foreground);
?>
? 파일 형식은 투명성을 지원해야합니다
JPEG는 투명성, PNG 및 GIF 지원을 지원하지 않습니다.
? 알파 블렌딩을 올바르게 처리하십시오
합성 전에 혼합을 닫고 합성 후 알파를 저장하십시오.
? 투명성 값을 확인하십시오
imagecolorallocatealpha 의 투명도 범위는 0 (불투명) ~ 127 (완전히 투명)이며 CSS의 0입니다. 1.0 255 다르고, 전환에주의를 기울이십시오.