PHP에서 이미지를 처리 할 때, 때로는 특정 영역 수정, 배경 교체 또는 단순히 이미지 라벨링과 같은 이미지의 특정 픽셀을 다시 색상해야합니다. 이 시나리오에서 imageColorResolve () 및 ImagesEtpixel () 은 매우 실용적인 쌍입니다.
imageColorResolve () 함수의 기능은 기존 이미지 리소스에서 지정된 색상 (RGB)에 가장 가까운 기존 색상 색인을 찾는 것입니다. 찾을 수 없다면 새 색상을 할당하려고합니다. 일부 이미지는 제한된 수의 색상 (특히 팔레트 이미지)을 가지고 있기 때문에 imageecolorallocate () 만 사용하는 것보다 유연합니다.
기능 프로토 타입은 다음과 같습니다.
int imagecolorresolve ( GdImage $image , int $red , int $green , int $blue )
$ 이미지 : 이미지 리소스
$ red , $ green , $ blue : 찾거나 만들기위한 컬러 성분
ImagesEtpixel ()은 단일 픽셀 기능 프로토 타입의 색상을 설정하는 데 사용됩니다.
bool imagesetpixel ( GdImage $image , int $x , int $y , int $color )
$ 이미지 : 이미지 리소스
$ x , $ y : 설정할 픽셀 좌표
$ color : 색인 지수 ( imageColorAllocate () , imageColorResolve () 등과 같은 함수에 의해 반환됨)
이미지가 있다고 가정하고 이미지 (예 : (50,50) ~ (150,150) 정사각형 영역)에서 밝은 파란색으로 특정 영역을 다시 검색하려고합니다.
우리는 이것을 할 수 있습니다 :
<?php
// 사진로드
$imagePath = 'https://m66.net/uploads/sample.png';
$image = imagecreatefrompng($imagePath);
if (!$image) {
die('无法사진로드');
}
// 대상 색상:밝은 파란색 (R:173, G:216, B:230)
$newColor = imagecolorresolve($image, 173, 216, 230);
// 루프 교체 (50,50) 도착하다 (150,150) 이 지역의 픽셀
for ($x = 50; $x <= 150; $x++) {
for ($y = 50; $y <= 150; $y++) {
imagesetpixel($image, $x, $y, $newColor);
}
}
// 输出结果도착하다浏览器
header('Content-Type: image/png');
imagepng($image);
// 무료 메모리
imagedestroy($image);
?>
이미지 권한 : 이미지에 액세스 할 수 있고 올바른 경로가 있는지 확인하십시오 (이 예제는 https://m66.net/uploads/sample.png를 사용합니다).
색상 수량 제한 : 팔레트 이미지의 경우 PHP의 GD 라이브러리는 최대 256 개의 색상 만 사용할 수 있습니다. ImageColorResolve ()를 초과하면 이미 사용 가능한 가장 가까운 색상을 반환 할 수 있습니다.
성능 문제 : 대규모에서 ImagesEtpixel ()을 사용하면 느리게 진행됩니다. 대규모 지역 픽셀을 효율적으로 처리 해야하는 경우 ImageFilledRectangle () 또는 ImageEcopy ( )와 같은 직접 조작하는 것을 고려해야합니다.
형식 지원 :이 예제는 PNG를 사용합니다. 물론 imageCreatefromjpeg () , imageCreateFromGif () 및 기타 함수를 사용하여 다른 형식을 처리 할 수도 있습니다.
imageEcolorResolve ()를 사용하면 색상 일치 및 할당 문제를 유연하게 처리 할 수 있으며 ImagesEtpixel ()은 개별 픽셀 레벨을 잘 제어 할 수 있습니다. 이 조합은 이미지 복구, 로컬 수정 및 동적 이미지 생성과 같은 장면에 매우 적합합니다.