- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在寻求有关如何调整黑白(或灰度)图像的颜色 channel 级别的帮助。在 photoshop 中,此功能称为黑白滤镜。
下面的例子展示了我的过程。最终图像中的红色衬衫(完美的中灰色)是黑色的。
原始图片
将色调更改为绿色
Final Image Now Black and White(中灰色/红色衬衫黑色)
最佳答案
对于 Imagemagick,您将使用 -level运算符调整黑白端点,这反过来又可以应用于特定颜色 channel .
例子:
convert source.png -level 45%,80% out.png
使用 PHP 的 Imagick library ,您将使用 Imagick::levelImage方法。
$img = new Imagick('source.png');
$quantum = $img->getQuantumRange()['quantumRangeLong'];
$img->levelImage(0.45 * $quantum, 1.0, 0.80 * $quantum, Imagick::CHANNEL_ALL);
更新
要生成中间图像(绿色衬衫),您可以将“红色 -> 绿色”色调调制与 -modulate 结合使用. Hue Modulation 中的示例文档。
convert source.jpg -modulate 100,100,166.6 green.png
// or in PHP
Imagick::modulateImage ( float $brightness , float $saturation , float $hue )
现在要将颜色换成黑色,只需使用 -fuzz和 -opaque .但老实说,所有的绿色调让我想起了 Chroma Key定义为...
隔离 mask 后,交换颜色、背景或更复杂的图像就非常简单。
convert green.png -fx '1 * b - 1 * g + 1' mask.png
蒙版方法的主要好处是颜色细节(阴影、高光和线条)将保留在最终图像中。在 PHP 中将所有这些整合在一起:
$img = new Imagick("source.jpg");
$org = clone $img; // Copy source for final composite
$img->modulateImage(100,100,166.6); // Convert hues from red to green
/*
Apply fx operations. Remember: K0, K1, & K2 are constants
that need to be adjusted to match the chroma-key that you
want to knockout.
*/
$mask = $img->fxImage('1.35 * b - 0.95 * g + 1');
// Copy the mask as the new alpha channel
$org->compositeImage($mask, Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
用黑色 80%(或灰色 20%)填充衬衫。在纯彩色图像上合成新图像,然后降为灰度。
$fin = new Imagick();
$fin->setSize($org->width, $org->height);
$fin->readImage("xc:gray20");
$fin->compositeImage($org, Imagick::COMPOSITE_DEFAULT, 0, 0);
$fin->setImageColorspace(Imagick::COLORSPACE_GRAY);
$fin->writeImage('fin.jpg');
下面是用图案填充衬衫的示例。
$pattern = new Imagick();
$pattern->setSize($org->width, $org->height);
$pattern->readImage("pattern:VERTICALSAW");
$pattern->negateImage(false);
$pattern->compositeImage($org, Imagick::COMPOSITE_DEFAULT, 0, 0);
$pattern->setImageColorspace(Imagick::COLORSPACE_GRAY);
$pattern->writeImage('pattern.jpg');
同样,如果您想保留细节,这是理想的选择。如果你想做一个完整的淘汰赛(例如,所有绿色到黑色 80%),只需使用 -fill , -opaque & -fuzz .
例子:
convert green.png -fill gray20 -fuzz 30% -opaque hsl\(33%,100%,50%\) black80.png
convert black80.png -colorspace Gray bw_shirt.png
关于javascript - PHP 或 JS : adjust color channel levels when converting image to black and white,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27514599/
我正在尝试学习 React.JS,但有些事情让我大吃一惊。 我有这个标题组件: class Header extends Component { render() { return ;
我正在尝试学习 React.JS,但有些事情让我大吃一惊。 我有这个标题组件: class Header extends Component { render() { return ;
我有一个 Cordova iPhone 应用程序,它使用状态栏插件。状态栏的背景设置为黑色,而文本曾经是白色。但是自从插件从0.1.3版本升级到0.1.8之后,文字变成了黑色。 是否可以恢复旧行为,或
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Difference between Color.red and Color.RED 我看到 Java 类
基于poetry docs : Likewise if you have command line tools such as pytest or black youcan run them usin
我正在使用 Shadowbox.js example code显示带有消息“此站点仍在 build 中!”的阴影框在页面加载时: Shadowbox.init({ // let's sk
我注意到 eclipse 有一个奇怪的行为? 我有一个静态变量: public static colorID = R.color.Black; 有时它与 R.color.Black 匹配: if(co
我正在尝试通过运行Windows 7的笔记本电脑通过腻子将SSH连接到Beaglebone Black。 打开BBB的电源并在Windows上安装所需的BBB驱动程序后,我可以在Chrome浏览器中浏
我正在尝试评估颜色选择器选择的颜色的暗度,看它是否“太黑”,如果是,则将其设置为白色。我想我可以使用十六进制值的第一个字符来实现这一点。它在工作,但它也在切换一些合法的“浅色”颜色。 我有以下代码:
我无法弄清楚为什么下面的代码中有一个黑色矩形,据我所知,隐藏选项留下了一些东西,但我不知道如何隐藏它或更改它颜色。 这是什么以及我们如何操纵它? Select flow slides
我昨天买了 beaglebone black 并尝试使用 USB 连接它。正如我所读到的那样,它预装了运行在 192.168.7.2 的 Linux Distro,我们可以使用 ssh 访问它。但我无
我们目前正在为 BeagleBone Black 开发一个应用程序(使用标准的 Angstrom 发行版)。它在 GDB(由 Netbeans 远程控制)下运行了一段时间(5-10 分钟),但在某个相
Arial Black网路安全吗? 我已经读过它,但是当我将其放入字体声明中时,就得到了Times New Roman的支持。 有人知道为什么吗? 最佳答案 根据代码样式字体调查(实际上可能是最好的估
假设你有一个 red-black tree这是一个有效的 binary search tree并且不违反任何这些规则: 节点是红色或黑色。 根是黑色的。 所有叶子 (NIL) 都是黑色的。 每个红色节
我想在 Jenkins 共享库中实现黑色扫描仪。这个想法是,当库看到 pyproject.toml 时,它将执行黑色检查。该命令设置为 black --check ./ 。这将为所有项目设置一次,因此
我想在 3D 绘画工具上构建撤消/重做功能。每次绘制后我将纹理存储在一个数组中,如下所示: var image3 = mesh.material.map.image;
所以我有一个红黑树如下: 2 = Root Black Children = 1 (Black/Left), 4 (Red/Right) Children of 1 = NIL & NIL => He
我不太确定如何解决。所以我正在编程 blackJack 并且我有我的函数声明(如图所示),对于我的 add_card_to_hand 函数,我不知道该怎么做。我有 2 个参数,一手牌是我通过引用传递的
这个问题在这里已经有了答案: Disable Visual Studio 2015 extra debug option (5 个答案) 关闭 6 年前。 因此,每当我尝试在 Visual Stud
自动视差 AndEngine给出黑屏。 public class MainActivity extends SimpleBaseGameActivity { static final int
我是一名优秀的程序员,十分优秀!