为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
Qyouu 2023-07-01 13:06:21
我有一个简单的HTML表单,用户可以在其中上传他们的图像,我需要借助以下命令将此上传的图像转换为特定颜色PHP例如,用户上传一些图像,我需要将整个图像转换为特定颜色(该颜色是动态的)有没有任何PHPGD图书馆可以帮助我实现这一目标?编辑例如,用户正在上传这种图像,然后我需要转换成以下类型的图像,
查看完整描述

4 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我仍然不确定你到底想做什么,但认为以下之一可能很接近。也许您可以在终端中尝试它们,直到我们最终能够找出正确的操作,然后我们就有希望将它们转换为 PHP。这是ImageMagick v7 语法:

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

//img1.sycdn.imooc.com//649fb480000175f301780173.jpg

或这个:

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

//img1.sycdn.imooc.com//649fb48a0001785601990199.jpg

您可以为洋红色指定十六进制颜色:


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');

?>


查看完整回答
反对 回复 2023-07-01
?
LEATH

TA贡献1936条经验 获得超6个赞

我尝试过制作类似的东西。请测试以下代码是否满足您的要求。


 <?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);


?>

用我的程序产生的输出:

//img1.sycdn.imooc.com//649fb49f0001890901940196.jpg

color_replace使用此程序,您每次想要更改颜色时都可以通过调用该方法来更改每种颜色。下图就是一个例子。

//img1.sycdn.imooc.com//649fb4a9000199ee01920192.jpg


查看完整回答
反对 回复 2023-07-01
?
侃侃无极

TA贡献2051条经验 获得超10个赞

我在这里为您提供了另一个解决方案,当然还是使用 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,您将获得您正在寻找的结果,如下所示:

//img1.sycdn.imooc.com//649fb4b500011d4401960199.jpg

查看完整回答
反对 回复 2023-07-01
?
POPMUISE

TA贡献1765条经验 获得超5个赞

你需要一些像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');


查看完整回答
反对 回复 2023-07-01
  • 4 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信