gpt4 book ai didi

php - 使用 imagick PHP 绘制透明图像

转载 作者:可可西里 更新时间:2023-11-01 12:19:07 25 4
gpt4 key购买 nike

我有一张透明背景的图片,我想用 5 像素的边框勾勒出轮廓。在 photoshop 中,我可以通过描边来实现这一点。

我试过使用 borderImage 但它不会勾勒出企鹅的轮廓。

$image = new Imagick();
$image->readImage('tux.png');

$image->borderImage(new ImagickPixel('red'), 5, 5); // no outline

这是图片。

tux original

这就是我想要实现的。

tux outlined

最佳答案

我将从命令行开始,稍后可能会执行 PHP,或者让您完成那一点...

第 1 步 - 提取透明度

如您所见,-border 勾勒出整个 图像,但实际上您只想勾勒出不透明 区域,因此您需要使用透明度或 alpha 层。让我们先提取它:

convert tux.png -alpha extract alpha.png

enter image description here

第 2 步 - 获取不透明区域的边缘

现在,你想要轮廓的边缘,所以我将使用 -morphology:

convert alpha.png -morphology edge octagon -threshold 50% edge.png

enter image description here

我听说人们在 PHP 中进行形态学操作时遇到困难,所以这里有一个不使用形态学的替代方法。基本上,它复制 alpha 层,然后使用统计数据找到每个 3x3 框中最亮的像素(这只会在 3x3 框中有一些黑色和一些白色像素的边缘产生影响)然后差异原始结果显示受影响的像素。做比描述更容易!

convert alpha.png \( +clone -statistic maximum 3x3 -threshold 50% \) -compose difference -composite edge.png

enter image description here

使用 5x5 的框来获得较粗的线条。

我看到有一个 -edge 5 选项,它更简单 - 我们生活和学习!

第 3 步 - 将边缘设为红色并保持透明

现在你想让白色变成红色,黑色变成透明:

convert edge.png -fill red -opaque white -transparent black rededge.png

enter image description here

第 4 步 - 在原件上合成红色轮廓

最后,您想将其合成到您的原件上:

convert tux.png rededge.png -composite result.png

enter image description here

整头 pig

或者,您可以像这样一次完成所有操作:

convert tux.png  \( +clone -alpha extract -morphology edge octagon -threshold 50% -fill red -opaque white -transparent black \) -composite result.png

您可能更喜欢 -morphology edgeout-morphology edge 更微妙的效果。

PHP 版本

我的 PHP 技能“低”,但我已经开始并且正在取得一些进步 - 稍后会更新,但到目前为止它看起来像这样:

   $image = new Imagick("tux.png");
$alpha = clone $image;
$alpha->separateImageChannel(Imagick::CHANNEL_ALPHA);
$alpha->negateImage(true);
$alpha->edgeImage(5);
$alpha->opaquePaintImage("white","red",65000,FALSE);
$alpha->transparentPaintImage("black",0.0,0,FALSE);
$image->compositeImage($alpha,Imagick::COMPOSITE_DEFAULT,0,0);
$image->writeImage("result.png");

这似乎很有用,但有些方面可能需要整理 - 特别是 65000 魔数(Magic Number),也许还有一些不必要的克隆和其他东西 - 我会把它留给你!

关于php - 使用 imagick PHP 绘制透明图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com