有人可以帮助我用一个简单的脚本来使用 PHP 将图像中的特定颜色替换为另一种颜色吗?这是一个示例(颜色从绿色变为黄色)。
如果你的意思是在 PHP 中使用 GD 库,你应该检查一下imagefilter()
步骤是:
imagefilter($img, IMG_FILTER_COLORIZE, 0, 255, 0))
0,255,0 是您的 RGB 颜色(本例中为亮绿色)编辑,工作代码和说明。
我的意思是,在黑线的外部使用 alpha,在内部使用白色。这是示例图像:
这是为白色部分着色的工作代码:
header('Content-Type: image/png');
/* RGB of your inside color */
$rgb = array(0,0,255);
/* Your file */
$file="../test.png";
/* Negative values, don't edit */
$rgb = array(255-$rgb[0],255-$rgb[1],255-$rgb[2]);
$im = imagecreatefrompng($file);
imagefilter($im, IMG_FILTER_NEGATE);
imagefilter($im, IMG_FILTER_COLORIZE, $rgb[0], $rgb[1], $rgb[2]);
imagefilter($im, IMG_FILTER_NEGATE);
imagealphablending( $im, false );
imagesavealpha( $im, true );
imagepng($im);
imagedestroy($im);
注意:我们必须否定值,因为 colorize 仅适用于非白色部分。我们可以通过使用带有黑色内部的白色边框图像来解决此问题。
注意:此代码仅适用于黑色边框和白色内部图像。
我想答案是拥有多个版本的图像,然后根据选择的颜色加载正确的图像?
您可以使用 switch 语句来加载正确的图像
//get selected colour
switch ($colour) {
case "red":
echo "<img src='RED IMAGE' ";
break;
case "blue":
echo "<img src='blue IMAGE' ";
break;
case "green":
echo "<img src='green IMAGE' ";
break;
}
希望这可以帮助。
<?php
header("Content-type: image/png");
$im = imagecreate(200, 200)
imagefill($im, 0, 0, $red);
// above could come from an uploaded image
// find a blue in the image
$newblue = imagecolorclosest($im, 0, 0, 255);
// change it to green
imagecolorset($im, $newblue, 0, 255, 0);
imagepng($im);
imagedestroy($im);
?php>
在这里,您可以找到最接近蓝色的颜色并替换为绿色。
我试过这个:
<?php
$imgname = "1.gif";
$im = imagecreatefromgif ($imgname);
$index = imagecolorexact ($im,0,128,0);
imagecolorset($im,$index,240,255,0);
$imgname = "result.gif";
imagegif($im,$imgname);
?>
<img src="result.gif">
而不是替换每个绿色像素,我得到了这个(衬衫颜色没有改变):
缓慢但确定的方法,迭代每个像素。
function ReplaceColour($img, $r1, $g1, $b1, $r2, $g2, $b2)
{
if(!imageistruecolor($img))
imagepalettetotruecolor($img);
$col1 = (($r1 & 0xFF) << 16) + (($g1 & 0xFF) << 8) + ($b1 & 0xFF);
$col2 = (($r2 & 0xFF) << 16) + (($g2 & 0xFF) << 8) + ($b2 & 0xFF);
$width = imagesx($img);
$height = imagesy($img);
for($x=0; $x < $width; $x++)
for($y=0; $y < $height; $y++)
{
$colrgb = imagecolorat($img, $x, $y);
if($col1 !== $colrgb)
continue;
imagesetpixel ($img, $x , $y , $col2);
}
}