PHP에서 imagecolorallocatealpha () 함수는 알파 (투명성) 정보를 가진 색상의 이미지를 할당하는 데 사용됩니다. 그러나이 기능이라는 점에 유의해야합니다. 비 트루 콜러 이미지 ( imageCreate () 에서 만든 팔레트 이미지)에서 사용하려고하면 예기치 않은 동작이나 오류가 발생할 수 있습니다.
그렇다면, 비 트루 콜러 이미지에서 Imagecolorallocatealpha () 의 기능을 간접적으로 사용하는 방법은 무엇입니까? 이 기사는 원칙을 통해 당신을 안내하고 실용적인 코드 예제를 제공합니다.
팔레트 기반 이미지
최대 256 개의 색상을 사용하면 각 색상은 팔레트에 저장됩니다. imageCreate () 에 의해 생성됩니다. 간단한 그래픽에 적합하지만 실제 투명 채널을 지원하지 않습니다.
truecolor 이미지 <br> 각 픽셀은 독립적으로 RGB (빨간색, 녹색, 파란색) 및 알파 (투명) 값을 저장합니다. imageCreatetRueColor () 에 의해 생성됩니다. 투명성이 필요한 복잡한 그래픽 및 시나리오에 적합합니다.
imagecolorallocatealpha () 에는 알파 채널이 포함되므로 트루 콜러 이미지가 필요합니다.
처음에 imageCreate () 로 팔레트 이미지를 만든 경우 imagecolorallocatealpha ()를 사용하기 전에 Truecolor 이미지로 변환 할 수 있습니다.
<?php
// 팔레트 이미지를 만듭니다
$paletteImage = imagecreate(200, 200);
$white = imagecolorallocate($paletteImage, 255, 255, 255);
$black = imagecolorallocate($paletteImage, 0, 0, 0);
// 팔레트 이미지를 변환합니다 truecolor 영상
$truecolorImage = imagecreatetruecolor(imagesx($paletteImage), imagesy($paletteImage));
imagecopy($truecolorImage, $paletteImage, 0, 0, 0, 0, imagesx($paletteImage), imagesy($paletteImage));
// 투명성으로 색상을 할당하십시오
$transparentRed = imagecolorallocatealpha($truecolorImage, 255, 0, 0, 64); // 64 반투명을 나타냅니다
// 이 색상을 사용하여 채우기 사각형을 그립니다
imagefilledrectangle($truecolorImage, 50, 50, 150, 150, $transparentRed);
// 설정은 다음과 같이 저장됩니다 PNG(투명성을 지원합니다)
header('Content-Type: image/png');
imagepng($truecolorImage);
// 기억을 청소하십시오
imagedestroy($paletteImage);
imagedestroy($truecolorImage);
?>
imageCreatetRueColor ()는 기본적으로 완전히 검은 배경을 가진 이미지를 만듭니다. 원래 팔레트 이미지의 배경을 유지하려면 imageCopy ()를 사용해야합니다.
출력은 알파 채널을 저장하기 위해 PNG 형식입니다 (JPEG는 투명성을 지원하지 않음).
투명도 값 알파의 범위는 0 (완전히 불투명)에서 127 (완전히 투명) 범위입니다.
<?php
$image = imagecreatefrompng('https://m66.net/images/sample.png');
$semiTransparentBlue = imagecolorallocatealpha($image, 0, 0, 255, 80);
imagefilledellipse($image, 100, 100, 80, 80, $semiTransparentBlue);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>