현재 위치: > 최신 기사 목록> 투명한 설정 후 이미지 저장 형식이 잘못되었습니다 (예 : JPEG 사용 등)

투명한 설정 후 이미지 저장 형식이 잘못되었습니다 (예 : JPEG 사용 등)

M66 2025-06-04

PHP에서 imagecolorallocatealpha ()는 이미지에 투명성 (알파 채널)이있는 색상을 할당하는 매우 유용한 기능입니다. 이 기능의 정의는 다음과 같습니다.

 int imagecolorallocatealpha ( GdImage $image , int $red , int $green , int $blue , int $alpha )

여기서 $ 알파 매개 변수의 값 범위는 0 (완전히 불투명) ~ 127 (완전히 투명)입니다.

많은 개발자들이 PHP의 GD 라이브러리를 사용하여 워터 마크 또는 반투명 스택과 같은 이미지를 처리 ​​할 때 투명한 효과를 사용하려고합니다. 따라서 ImageColoralLocatealpha ()를 사용하여 투명한 색상을 할당 한 다음 imagePng () , imageGif () 또는 imageJPeg () 로 파일을 저장합니다. 그러나 JPEG 형식으로 저장할 때 투명성 효과가 완전히 사라지고 이미지 손상 또는 색상 이상이 발생한다는 것을 종종 발견합니다.

왜 이런 일이 일어나고 있습니까?

1 ??? JPEG 형식 자체는 투명성을 지원하지 않습니다

이것은 가장 핵심적인 문제입니다. JPEG (또는 JPG)는 사진과 같은 이미지를 저장하기 위해 특별히 설계된 손실 압축 이미지 형식이며 알파 채널이나 투명성을 전혀 지원하지 않습니다.

메모리에 투명한 픽셀이있는 이미지를 만들 때 (예 : imageecolorallocatealpha ()를 사용하여 색상을 할당하기 위해 imageColallocateAlpha ()를 호출하여 저장하려면 GD 라이브러리는 JPEG 파일 사양에 알파 채널을 저장할 장소가 없기 때문에 투명성 정보를 버려야합니다.

이것은 다음으로 이어진다.

  • 투명 영역은 일반적으로 흑백으로 채워져 있습니다 (구현에 따라 다름).

  • 사용하는 색상에 알파가있는 경우 저장 중에 잘못 해석되어 비정상적인 색상 값이 발생할 수 있습니다.

  • 일부 이미지 뷰어 또는 라이브러리는 이러한 "Tonparent Data가 혼합 된"JPEG 파일을 읽을 때 예외를 표시 할 수 있습니다.

2 ?? 투명성을 지원하는 형식이어야합니다

목표가 투명성으로 이미지를 저장하는 것이면 PNG 또는 GIF 형식을 사용해야합니다.

  • PNG는 진정한 알파 채널을 지원하며 고품질, 완전히 투명하거나 반 트랜스 팬 트랜스 펜트 이미지를 절약 할 수 있습니다.

  • GIF는 단색 투명성 (반투명 없음) 만 지원하지만 간단한 투명성에도 충분합니다.

php에서 이미지 jpeg ()를 imagepng () 또는 imageGif () 로 대체하면 투명도로 이미지를 올바르게 저장할 수 있습니다. 예를 들어:

 <?php
$img = imagecreatetruecolor(200, 200);

// 할 수 있게 하다 alpha 채널 절약
imagesavealpha($img, true);
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $transparent);

// 이미지에 무언가를 그립니다
$red = imagecolorallocatealpha($img, 255, 0, 0, 60);
imagefilledellipse($img, 100, 100, 150, 150, $red);

// AS를 저장하십시오 PNG
imagepng($img, 'output.png');

// 또는 리모컨에 저장하십시오 URL(도메인 이름은 다음과 같습니다 m66.net)
imagepng($img, 'https://m66.net/uploads/output.png');

imagedestroy($img);
?>

3 ???? 요약 : 형식과 투명성 사이의 불일치를 피하십시오

투명성을 사용하려면 다음을 기억하십시오.

? PNG 형식을 저장하려면 ImagePng () 를 사용하십시오.
? ImageGif ()를 사용하여 흑백 투명 GIF를 저장하십시오.
? JPEG는 투명성을 전혀 지원하지 않기 때문에 ImageJPEG ()를 피하십시오.

JPEG를 사용해야하는 경우 (예 : 파일 크기를 줄이려면) 투명 영역을 먼저 제거하거나 저장하기 전에 투명 픽셀을 불투명 한 색상으로 교체해야합니다. 배경을 ImageFill () 로 채우거나 불투명 새로운 캔버스에 imageCopyResampled () 로 합성 할 수 있습니다.