12
另一個視頻中的特定RGB顏色我得出一個完美的色彩從https://stackoverflow.com/a/32710756/1620626更換的腳本。我想用圖像背景替換目標顏色。在原始圖像中背景與淺綠色(rgb:0b255b1)
。我可以用藍色代替它,但我沒有一個想法如何用圖像來代替。這是腳本。替換使用PHP
該腳本完全替換了新的目標顏色。現在我想從藍色變爲背景。所以最後的想法是。這個女孩在我選擇的背景圖片上。
下面是代碼:
<?php
//https://stackoverflow.com/a/32710756/1620626
function RGBtoHSL($r, $g, $b) {
$r /= 255;
$g /= 255;
$b /= 255;
$max = max($r, $g, $b);
$min = min($r, $g, $b);
$l = ($max + $min)/2;
$d = $max - $min;
if($d == 0){
$h = $s = 0;
} else {
$s = $d/(1 - abs(2 * $l - 1));
switch($max){
case $r:
$h = 60 * fmod((($g - $b)/$d), 6);
if ($b > $g) {
$h += 360;
}
break;
case $g:
$h = 60 * (($b - $r)/$d + 2);
break;
case $b:
$h = 60 * (($r - $g)/$d + 4);
break;
}
}
return array(round($h, 2), round($s, 2), round($l, 2));
}
function HSLtoRGB($h, $s, $l){
$c = (1 - abs(2 * $l - 1)) * $s;
$x = $c * (1 - abs(fmod(($h/60), 2) - 1));
$m = $l - ($c/2);
if ($h < 60) {
$r = $c;
$g = $x;
$b = 0;
} else if ($h < 120) {
$r = $x;
$g = $c;
$b = 0;
} else if ($h < 180) {
$r = 0;
$g = $c;
$b = $x;
} else if ($h < 240) {
$r = 0;
$g = $x;
$b = $c;
} else if ($h < 300) {
$r = $x;
$g = 0;
$b = $c;
} else {
$r = $c;
$g = 0;
$b = $x;
}
$r = ($r + $m) * 255;
$g = ($g + $m) * 255;
$b = ($b + $m ) * 255;
return array(floor($r), floor($g), floor($b));
}
/* ---------------CHANGE THESE------------------- */
$colorToReplace = RGBtoHSL(0,255,1);//target color
$hueAbsoluteError = 7;//the more the clearer
$replacementColor = RGBtoHSL(0, 192, 239);//new color
/* ---------------------------------------------- */
$filename = 'images/01.png';
$im = imagecreatefrompng($filename);
$out = imagecreatetruecolor(imagesx($im), imagesy($im));
$transColor = imagecolorallocatealpha($out, 254, 254, 254, 127);
imagefill($out, 0, 0, $transColor);
for ($x = 0; $x < imagesx($im); $x++) {
for ($y = 0; $y < imagesy($im); $y++) {
$pixel = imagecolorat($im, $x, $y);
$red = ($pixel >> 16) & 0xFF;
$green = ($pixel >> 8) & 0xFF;
$blue = $pixel & 0xFF;
$alpha = ($pixel & 0x7F000000) >> 24;
$colorHSL = RGBtoHSL($red, $green, $blue);
if ((($colorHSL[0] >= $colorToReplace[0] - $hueAbsoluteError) && ($colorToReplace[0] + $hueAbsoluteError) >= $colorHSL[0])){
$color = HSLtoRGB($replacementColor[0], $replacementColor[1], $colorHSL[2]);
$red = $color[0];
$green= $color[1];
$blue = $color[2];
}
if ($alpha == 127) {
imagesetpixel($out, $x, $y, $transColor);
}
else {
imagesetpixel($out, $x, $y, imagecolorallocatealpha($out, $red, $green, $blue, $alpha));
}
}
}
imagecolortransparent($out, $transColor);
imagesavealpha($out, TRUE);
header('Content-type: image/png');
imagepng($out);
?>
結果看起來棒極了,但我得到了錯誤500在我的服務器上。怎麼了? http://phuket.my/irp/ – Wilf
@Wilf你需要檢查日誌或以其他方式進行調試,從500錯誤是不可能說出什麼問題。 [這裏](https://github.com/serebrov/so-questions/tree/master/php-image-background)是我使用的完整代碼,下載整個文件夾或克隆存儲庫,以'php convert'運行。 PHP> out.png',源圖像是下'圖像/'。 –