PHP:将动态上传的图像转换为特定颜色(动态颜色)

PHP:将动态上传的图像转换为特定颜色(动态颜色),php,image,image-processing,gd,Php,Image,Image Processing,Gd,我有一个简单的HTML表单,用户可以上传他们的图像,我需要借助PHP 例如,用户上传一些图像,我需要将整个图像转换为特定颜色(该颜色是动态的) 是否有任何PHPGD库可以帮助我实现这一点 编辑 例如,用户正在上传这种图像 然后我需要转换成以下类型的图像 你需要像这样的图书馆。要替换某些颜色,您需要 $image=newimagick('test.jpg'); $clut=new Imagick(); $clut->newImage(1,1,新的ImagickPixel('rgb(255,0,0

我有一个简单的
HTML
表单,用户可以上传他们的图像,我需要借助
PHP

例如,用户上传一些图像,我需要将整个图像转换为特定颜色(该颜色是动态的)

是否有任何
PHPGD
库可以帮助我实现这一点

编辑

例如,用户正在上传这种图像

然后我需要转换成以下类型的图像


你需要像这样的图书馆。要替换某些颜色,您需要

$image=newimagick('test.jpg');
$clut=new Imagick();
$clut->newImage(1,1,新的ImagickPixel('rgb(255,0,0'));
$image->clutImage($clut);
$image->writeImage('test_out.jpg');

我仍然不确定您到底想做什么,但我认为以下一项可能很接近。也许您可以在终端中尝试它们,直到我们最终能够解决正确的操作,然后我们才有希望将它们翻译成PHP。这是ImageMagickv7语法:

magick image.png -channel RGB -colorspace gray +level-colors red,  result.png

或者这个:

magick image.png -fill red +opaque white result2.png

您可以用十六进制指定颜色,如洋红:

magick image.png -channel RGB -colorspace gray -auto-level +level-colors '#ff00ff',  result.png
如果使用v6ImageMagick,请将
magick
替换为
convert


我的PHP非常生锈,但类似这样:

#!/usr/local/bin/php -f
<?php

// Emulating something akin to this ImageMagick command:
// magick image.png -fill red +opaque white result.png
// Open input image and get dimensions
$im = new \Imagick('image.png');

// Temporarily deactivate alpha channel
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);

// Apply colour to non-white areas
$im->opaquePaintImage('white','red', 0, true);

// Reactivate alpha channel
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);

// Save
$im->writeImage('result.png');
?>
#/usr/local/bin/php-f

我曾尝试制作类似的产品。如果满足您的要求,请测试以下代码

 <?PHP
 ini_set('display_errors', '1');
 ini_set('display_startup_errors', '1');
 error_reporting(E_ALL);

 /*
  @desc replaces target color of an image with the provided fill color

 */
 function color_replace($img,$target,$fill,$fuzz){

          $img->opaquePaintImage($target, $fill, $fuzz, false, Imagick::CHANNEL_DEFAULT);
          return $img;
 }

$img = new Imagick('source.png');
$img->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
$fuzz = 0.44 * $img->getQuantumRange()['quantumRangeLong'];
$img=color_replace($img,'rgba(50,173,186,255)','red',$fuzz); // replace paste like color with red
$img=color_replace($img,'rgb(230,218,30)','#9c1f24',$fuzz); // replace golden like color with dark red

$img->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);

$img->setImageFormat ("jpeg");
file_put_contents ("test_1.jpg", $img);

?>

使用我的程序生成的输出:

使用此程序,您可以在每次需要更改颜色时调用
color\u replace
方法来更改每个单独的颜色。下图就是一个例子


我这里为您提供了另一个解决方案,当然还有Imagick:

$im = new Imagick('path/to/start-image')
$im->transformimagecolorspace(Imagick::IMGTYPE_GRAYSCALE);
$im->writeImage('path/to/gray.jpg'));
$im->clear();

$im = new Imagick('path/to/gray.jpg'));
$im->blackThresholdImage( "#cdcdcd" );
$im->writeImage('path/to/black-white.jpg'));
$im->clear();

$im = new Imagick('path/to/black-white.jpg'));
$im->colorizeImage('rgba(209, 15, 16, 1)', 1, true);
$im->writeImage('path/to/red.jpg'));
$im->clear();
然后,只需删除gray.jpg和black-white.jpg中间文件,即可获得所需的结果,如下所示:


安装并使用该库。做……真是太棒了。。。很多包括这个。谢谢,你知道什么例子吗?从未使用过Imagick,任何示例都会非常有用。请提供示例输入图像和预期结果。也许是这个?没有特定的或示例的图像,因为用户可以上传任何有效的图像,并且我需要将任何图像转换成我的颜色,所以你可以考虑任何图像。我给你发了一张女王的照片,你把它改成蓝色,然后给我寄回一张与原图大小相同的纯蓝色图像?谢谢你的回答,例如,我上传了一张有多种颜色的照片,那么我该怎么做呢?在这里我可以看到你只通过了1color@KeyurShah所以循环你的颜色替换显示我能找到我的所有图像颜色吗?太棒了!!!!!!!有了命令行,它工作起来真的很酷,这正是我想要的,有了代码池,你知道我该如何实现这一点吗?我拼凑了一些PHP,请再看一看。有了代码,它也将颜色应用于白色,它在我的机器上对你提供的示例图像工作得很好。你可能使用了不同的图像吗?是的,我使用了不同的图像(我使用了15个不同的图像和命令,效果非常好)。你检查过不同的图片吗?我怎么知道我需要更换什么颜色?因为这个图像不是静态的,它是动态的,用户可以上传任何类型的图像,那么接受用户的输入怎么样。例如,使用颜色选择器,我们可以轻松地获取它们的输入。但问题可能是输入错误。我会想得更多,给你一个想法。照片编辑器的滴管行为可能会自动从照片中选择所有颜色,并向用户请求替换颜色。但我会想得更多。谢谢