Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-imagick:关闭图像中的开放区域_Php_Imagick - Fatal编程技术网

PHP-imagick:关闭图像中的开放区域

PHP-imagick:关闭图像中的开放区域,php,imagick,Php,Imagick,在以下代码之后: $im = new \Imagick('fu.png'); $im->thresholdimage(0.9, 127); 我得到了这个图像: 所以我需要关闭开放区域。 当我复制以下代码时: $im = new \Imagick('fu.png'); $im->thresholdimage(0.9, 127); $canvas = $this->getCharacterOutline(); $kernel = \ImagickKernel::fromB

在以下代码之后:

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

$im->thresholdimage(0.9, 127);
我得到了这个图像:

所以我需要关闭开放区域。 当我复制以下代码时:

$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

我不知道如何使用它,我从来没有见过这样的东西,我确信这不是一个逻辑思考的问题,而是确切地知道该怎么做,否则你就完蛋了

请帮忙

更新:

正如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();

我不知道我在做什么,也不知道这狗屎到底该做什么。。。我遇到了一个错误,C…

请改为这样做,因为
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();

$此
引用当前对象或类。这就是为什么会出现错误,因为您告诉PHP从当前对象或类中查找
getCharacterOutline
函数,而该对象或类不是您的代码。再次查看此链接并查看页面底部的示例26。我更新了问题。。你能发布完整的代码吗?我真的对它感到厌倦了,只需从这个
$canvas=$this->getCharacterOutline()中删除
$this->
和echo
$canvas
而不是
$im
如果这解决了您的问题@AnneSchwarz请投票或将其标记为正确谢谢!)否:PHP解析错误:语法错误,意外的“private”(T_private)。。。当我从私有函数getCharacterOutline()中删除private时,它仍然忘记了
private
部分。删除私有文件后你得到了什么?现在是:“未找到类'ImagickKernel'”我需要从中下载这些垃圾吗?如果是:全部还是仅ImagickKernel.php(仅为1,5kb wtf)?