【问题标题】:PHP Imagick outline/contour and sketchPHP Imagick 轮廓/轮廓和草图
【发布时间】:2014-11-21 08:20:15
【问题描述】:

我无法获得精细的图像轮廓

如何用 PHP Imagick 做到这一点?

输入图像:Imagick 向导

计划 #1 大纲

  1. 获取具有(更多/更少)清晰、一致背景(例如:白色、红色或透明)的图像
  2. 如果设置了背景,则删除背景
  3. 添加轮廓(特定颜色)
  4. 删除里面的图片

结果:http://i57.tinypic.com/2wg91qx.png

计划 #2 草图

  1. 获取具有(更多/更少)清晰、一致背景(例如:白色、红色或透明)的图像
  2. 如果设置了背景,则删除背景
  3. 添加素描效果
  4. 删除里面的图片

结果:http://i60.tinypic.com/az9vr5.png


PS: 边框和/或阴影不适合我

【问题讨论】:

  • 我在尝试添加大纲时遇到了困难。不知道如何对真实图像进行轮廓/边缘处理...我尝试添加阴影 - 不成功
  • 查看我关于如何使用 ImageMagick 命令行实用程序解决此问题的答案:stackoverflow.com/questions/42945964/…

标签: php image-processing imagick contour outline


【解决方案1】:

勾勒图片的方法有很多种。这是其中一个或多或少可以满足您想要的功能。请注意,向导的图片需要一些额外的处理。第一个背景不是全白的(它有一些#FEFEFE 或类似的像素)。更让人头疼的是,书桌的上半部分全是纯白。因此,您可以在模糊后使用白色像素作为背景(我的方式),或者尝试使用matteFloodfillImage() 从角落填充填充。然而,这可能会使桌腿之间的空间不透明。

function drawImage(Imagick $i) 
{
    $i->setImageFormat("png");
    header("Content-Type: image/" . $i->getImageFormat());
    echo $i;
    exit;
}

$o = new Imagick('wizard.png');
$o->setImageBackgroundColor('white'); // handle tranparent images
$o = $o->flattenImages(); // flatten after setting background
$o->blurImage(5, 30);
$o->whiteThresholdImage( "#F8F8F8" );
$o->blackThresholdImage( "#FFFFFF" );
$o->edgeImage(5);
$o->negateImage(false);
$o->paintTransparentImage($o->getImagePixelColor(0, 0), 0, 2000);
$o->colorizeImage("red", 1);

drawImage($o);

草图有点复杂,我建议进一步阅读 IM 功能http://www.imagemagick.org/Usage/photos/#color-in

【讨论】:

  • 很好的答案!但是你能告诉我为什么它不适用于具有透明背景的 .png 文件吗?与 .jpg 相同的图像效果很好:O(与 .png 文件相比)
  • 我认为edge 需要纯色背景。查看更新的代码 - 它应该处理透明和不透明的图像
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2021-07-09
相关资源
最近更新 更多