-
鸿蒙传说
我仍然不确定你到底想做什么,但认为以下之一可能很接近。也许您可以在终端中尝试它们,直到我们最终能够找出正确的操作,然后我们就有希望将它们转换为 PHP。这是ImageMagick v7 语法: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如果使用 v6 ImageMagick,请替换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');?>
-
LEATH
我尝试过制作类似的东西。请测试以下代码是否满足您的要求。 <?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_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,您将获得您正在寻找的结果,如下所示:
-
POPMUISE
你需要一些像Imagick. 要替换某些颜色,您需要clutImage$image = new Imagick('test.jpg');$clut = new Imagick();$clut->newImage(1, 1, new ImagickPixel('rgb(255, 0, 0)'));$image->clutImage($clut);$image->writeImage('test_out.jpg');