PHP Imagick大纲/轮廓和草图

时间:2014-09-26 10:34:55

标签: php image-processing imagick contour outline

我有一个问题就是获得精细的图像轮廓

如何使用PHP Imagick做到这一点?

输入图片: Imagick向导

计划#1大纲

  1. 使用(更多/更少)清晰,一致的背景(例如:白色,红色或透明)获取图像
  2. 删除背景(如果已设置)
  3. 添加轮廓(特定颜色)
  4. 删除
  5. 中的图片

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

    计划#2草图

    1. 使用(更多/更少)清晰,一致的背景(例如:白色,红色或透明)获取图像
    2. 删除背景(如果已设置)
    3. 添加草图效果
    4. 删除
    5. 中的图片

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


      PS: 边框和/或阴影并没有“对我有用”

1 个答案:

答案 0 :(得分:2)

有很多方法可以勾勒出一幅画面。这是其中一个或多或少地做你想要的东西。请注意,向导的图片需要一些额外的处理。第一个背景不是完全白色(它有一些#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