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

我有一个简单的HTML表单,用户可以在其中上传他们的图像,我需要借助以下命令将此上传的图像转换为特定颜色PHP

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

有没有任何PHPGD图书馆可以帮助我实现这一目标?

编辑

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

http://img1.mukewang.com/649fb46a0001f4af01800179.jpg

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

http://img.mukewang.com/649fb4740001dbaf01790177.jpg


Qyouu
浏览 167回答 4
4回答

鸿蒙传说

我仍然不确定你到底想做什么,但认为以下之一可能很接近。也许您可以在终端中尝试它们,直到我们最终能够找出正确的操作,然后我们就有希望将它们转换为 PHP。这是ImageMagick&nbsp;v7 语法:magick&nbsp;image.png&nbsp;-channel&nbsp;RGB&nbsp;-colorspace&nbsp;gray&nbsp;+level-colors&nbsp;red,&nbsp;&nbsp;result.png或这个:magick&nbsp;image.png&nbsp;-fill&nbsp;red&nbsp;+opaque&nbsp;white&nbsp;result2.png您可以为洋红色指定十六进制颜色:magick image.png -channel RGB -colorspace gray -auto-level +level-colors '#ff00ff',&nbsp; 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

我尝试过制作类似的东西。请测试以下代码是否满足您的要求。&nbsp;<?PHP&nbsp;ini_set('display_errors', '1');&nbsp;ini_set('display_startup_errors', '1');&nbsp;error_reporting(E_ALL);&nbsp;/*&nbsp; @desc replaces target color of an image with the provided fill color&nbsp;*/&nbsp;function color_replace($img,$target,$fill,$fuzz){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $img->opaquePaintImage($target, $fill, $fuzz, false, Imagick::CHANNEL_DEFAULT);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $img;&nbsp;}$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');
打开App,查看更多内容
随时随地看视频慕课网APP