블렌드 모드는 이미지 처리 중 일반적인 기술로, 특정 수학 공식에 따라 두 개의 이미지를 혼합하여 다양한 시각 효과를 생성 할 수 있습니다. PHP에서 GD 라이브러리는 이미지 처리를위한 주요 도구이며 imagelayeReffect ()는 계층 효과를 제어하는 데 사용되는 기능 중 하나입니다. 그렇다면 ImageLayereffect ()가 혼합 모드 구현에 유능합니까? 이 기사는이 기능의 기능을 깊이 탐색하고 이미지 혼합 효과를 달성하기위한 완벽한 솔루션을 제공합니다.
imagelayeReffect () 는 PHP GD 라이브러리의 함수입니다. 그 기능은 레이어 병합 모드를 설정하고 후속 이미지 복사 또는 도면 작업에 영향을 미치는 것입니다. 구문은 다음과 같습니다.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagelayereffect</span></span><span>(GdImage </span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$effect</span></span><span>);
</span></span>
일반적으로 사용되는 효과 값은 다음과 같습니다.
img_effect_replace : 기본 동작은 픽셀을 직접 교체하십시오.
IMG_EFFECT_ALPHABLEND : 표준 알파 믹스.
img_effect_normal : 위와 동일합니다.
img_effect_overlay : 오버레이 믹싱을 수행하십시오.
img_effect_multiply : 곱셈 믹싱을 수행하십시오.
img_effect_mergegray : 그레이 스케일 병합을 수행합니다.
IMG_EFFECT_OVERLAY 와 IMG_EFFECT_MULTIPLY 의 두 가지 옵션은 모든 PHP 버전에서 지원되지 않으며 이전 버전에서 구현되거나 유효하지 않습니다.
ImageLayereffect ()는 사전 정의 된 하이브리드 모드를 제공하지만 유연성과 다양성은 훨씬 덜 유연하며 물론 imagemagick와 같은 전문 이미지 소프트웨어 또는 도구로서 훨씬 덜 유연합니다. 더 중요한 것은 imagecopy () , imagecopymerge () 등과 같은 함수 사용과 같은 다음 이미지 복사 작업에서만 작동합니다. 기존 픽셀 데이터에는 영향을 미치지 않으며 임의의 블렌드 모드 사용자 정의 공식을 지원하지 않습니다.
따라서 Photoshop의 "Soft Light", "Color Filter", "Linear Deepening"과 같은보다 복잡하거나 맞춤형 블렌딩 모드를 구현 해야하는 경우 수동 픽셀 별 계산을 통해이를 수행해야합니다.
"곱하기"를 예로 들어두면 다음과 같은 방식으로 두 이미지를 혼합 할 수 있습니다.
<span><span><span class="hljs-variable">$bg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'background.png'</span></span><span>); </span><span><span class="hljs-comment">// 배경 이미지</span></span><span>
</span><span><span class="hljs-variable">$fg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'foreground.png'</span></span><span>); </span><span><span class="hljs-comment">// 전경지도</span></span><span>
</span><span><span class="hljs-variable">$width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$bg</span></span><span>);
</span><span><span class="hljs-variable">$height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$bg</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-variable">$width</span></span><span>, </span><span><span class="hljs-variable">$height</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$y</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$y</span></span><span> < </span><span><span class="hljs-variable">$height</span></span><span>; </span><span><span class="hljs-variable">$y</span></span><span>++) {
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$x</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$x</span></span><span> < </span><span><span class="hljs-variable">$width</span></span><span>; </span><span><span class="hljs-variable">$x</span></span><span>++) {
</span><span><span class="hljs-variable">$bgColor</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorat</span></span><span>(</span><span><span class="hljs-variable">$bg</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>, </span><span><span class="hljs-variable">$y</span></span><span>);
</span><span><span class="hljs-variable">$fgColor</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorat</span></span><span>(</span><span><span class="hljs-variable">$fg</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>, </span><span><span class="hljs-variable">$y</span></span><span>);
</span><span><span class="hljs-variable">$bgR</span></span><span> = (</span><span><span class="hljs-variable">$bgColor</span></span><span> >> </span><span><span class="hljs-number">16</span></span><span>) & </span><span><span class="hljs-number">0xFF</span></span><span>;
</span><span><span class="hljs-variable">$bgG</span></span><span> = (</span><span><span class="hljs-variable">$bgColor</span></span><span> >> </span><span><span class="hljs-number">8</span></span><span>) & </span><span><span class="hljs-number">0xFF</span></span><span>;
</span><span><span class="hljs-variable">$bgB</span></span><span> = </span><span><span class="hljs-variable">$bgColor</span></span><span> & </span><span><span class="hljs-number">0xFF</span></span><span>;
</span><span><span class="hljs-variable">$fgR</span></span><span> = (</span><span><span class="hljs-variable">$fgColor</span></span><span> >> </span><span><span class="hljs-number">16</span></span><span>) & </span><span><span class="hljs-number">0xFF</span></span><span>;
</span><span><span class="hljs-variable">$fgG</span></span><span> = (</span><span><span class="hljs-variable">$fgColor</span></span><span> >> </span><span><span class="hljs-number">8</span></span><span>) & </span><span><span class="hljs-number">0xFF</span></span><span>;
</span><span><span class="hljs-variable">$fgB</span></span><span> = </span><span><span class="hljs-variable">$fgColor</span></span><span> & </span><span><span class="hljs-number">0xFF</span></span><span>;
</span><span><span class="hljs-comment">// Multiply 패턴 공식: result = (A * B) / 255</span></span><span>
</span><span><span class="hljs-variable">$newR</span></span><span> = (</span><span><span class="hljs-variable">$bgR</span></span><span> * </span><span><span class="hljs-variable">$fgR</span></span><span>) / </span><span><span class="hljs-number">255</span></span><span>;
</span><span><span class="hljs-variable">$newG</span></span><span> = (</span><span><span class="hljs-variable">$bgG</span></span><span> * </span><span><span class="hljs-variable">$fgG</span></span><span>) / </span><span><span class="hljs-number">255</span></span><span>;
</span><span><span class="hljs-variable">$newB</span></span><span> = (</span><span><span class="hljs-variable">$bgB</span></span><span> * </span><span><span class="hljs-variable">$fgB</span></span><span>) / </span><span><span class="hljs-number">255</span></span><span>;
</span><span><span class="hljs-variable">$color</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-variable">$newR</span></span><span>, </span><span><span class="hljs-variable">$newG</span></span><span>, </span><span><span class="hljs-variable">$newB</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagesetpixel</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>, </span><span><span class="hljs-variable">$y</span></span><span>, </span><span><span class="hljs-variable">$color</span></span><span>);
}
}
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-string">'output.png'</span></span><span>);
</span></span>
이 예는 픽셀로 픽셀의 두 이미지 픽셀의 RGB 값을 혼합하여 곱셈 및 혼합 효과를 달성하는 방법을 보여줍니다. 성능이 기본 라이브러리 호출의 성능만큼 좋지는 않지만, 자유도가 매우 높으며 이미지 합성 프로세스의 정확한 제어가 필요한 시나리오에 적합합니다.
imagelayeReffect ()는 일부 기본 시나리오에서 특히 알파 병합 작업을 지원하기 위해 이미지 믹싱 처리를 단순화 할 수 있습니다. 그러나 그 기능은 제한되어 있으며 모든 유형의 하이브리드 모드를 다룰 수는 없습니다. 보다 복잡한 이미지 믹싱 요구를 위해 개발자는 수동으로 픽셀을 처리하거나 Imagemagick 또는 외부 도구와 같은보다 포괄적 인 이미지 처리 라이브러리를 사용해야합니다.
PHP는 특별한 이미지 처리 언어는 아니지만 서버 측에서 이미지를 생성하거나 처리 할 때 여전히 안정적이고 제어 가능한 선택입니다. GD 라이브러리 기능과 알고리즘 로직을 합리적으로 결합하면 이미지 편집의 많은 가능성이 달성 될 수 있습니다.