【问题标题】:PHP - imagick: close open areas in imagePHP - imagick:关闭图像中的开放区域
【发布时间】:2017-01-10 19:12:43
【问题描述】:

后面的代码:

$im = new \Imagick('fu.png');

$im->thresholdimage(0.9, 127);

我收到这张图片:

所以我需要关闭开放区域。 当我从http://phpimagick.com/Imagick/morphology?morphologyType=9 复制代码时:

$im = new \Imagick('fu.png');

$im->thresholdimage(0.9, 127);

$canvas = $this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK, "6");
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE, 1, $kernel);

    header("Content-Type: image/png");
    echo $im->getImageBlob();

我收到错误:PHP 致命错误:在不在对象上下文中时使用 $this。

我不知道如何使用它,我从未见过类似的东西,我确信这不是逻辑思维问题,而是确切地知道该怎么做,否则你就是 f* **编辑。

请帮忙!

更新:

正如 Roljhon 解释的那样,我需要使用 getchar.. 函数,所以我这样做了:

private function getCharacterOutline()
{
    $im = new \Imagick('fu.png');

    $im->thresholdimage(0.9, 127);

    $character = new \Imagick();
    $character->newPseudoImage(
        $im->getImageWidth(),
        $im->getImageHeight(),
        "canvas:white"
    );
    $canvas = new \Imagick();
    $canvas->newPseudoImage(
        $im->getImageWidth(),
        $im->getImageHeight(),
        "canvas:black"
    );

    $character->compositeimage(
        $im,
        \Imagick::COMPOSITE_COPYOPACITY,
        0, 0
    );
    $canvas->compositeimage(
        $character,
        \Imagick::COMPOSITE_ATOP,
        0, 0
    );
    $canvas->setFormat('png');

    return $canvas;
}


$canvas = $this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK, "6");
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE, 1, $kernel);

header("Content-Type: image/png");
echo $im->getImageBlob();

我不知道自己在做什么,也不知道这个垃圾到底应该做什么......我遇到了错误......

【问题讨论】:

  • $this 指的是当前对象或类。这就是为什么你会收到一个错误,因为你告诉 PHP 从当前对象或类中找到 getCharacterOutline 函数,而不是你的代码。再次查看此链接phpimagick.com/Imagick/morphology?morphologyType=9 并查看页面底部的示例 26。
  • 我更新了问题..你能发布整个代码吗?我真的厌倦了它

标签: php imagick


【解决方案1】:

这样做是因为getCharacterOutline 是一个独立的函数,而不是在一个类中

更新

$canvas = getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK, "6");
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE, 1, $kernel);
header("Content-Type: image/png");
echo $canvas->getImageBlob();

【讨论】:

  • 只需从$canvas = $this->getCharacterOutline(); 中删除$this-> 并回显$canvas 而不是$im
  • 如果这解决了您的问题@AnneSchwarz,请投票或标记为正确谢谢! :)
  • nope: PHP Parse error: syntax error, unexpected 'private' (T_PRIVATE)... 当我从私有函数 getCharacterOutline() 中删除私有时,它仍然是 BS
  • 忘记了 private 部分。删除私有后你会得到什么?
  • 现在是:“找不到类'ImagickKernel'”我需要从github.com/calcinai/php-imagick/tree/master/src 下载这个废话吗?如果是:一切或只是 ImagickKernel.php(只有 1,5kb wtf)?
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2010-12-29
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多