PHP 8.1.0 Released!

Imagick::morphology

(PECL imagick 3 >= 3.3.0)

Imagick::morphologyОписание

Описание

public Imagick::morphology(
    int $morphologyMethod,
    int $iterations,
    ImagickKernel $ImagickKernel,
    int $channel = Imagick::CHANNEL_DEFAULT
): bool

Применяет к изображению ядро, предоставленное пользователем, в соответствии с заданным методом морфологии.

Список параметров

morphologyMethod

Какой метод морфологии использовать: одна из констант \Imagick::MORPHOLOGY_*.

iterations

Количество итераций для применения морфологической функции. Значение -1 означает цикл до тех пор, пока не будет найдено никаких изменений. Как это применяется, может зависеть от метода морфологии. Обычно это значение равно 1.

ImagickKernel

channel

Возвращаемые значения

В случае успешной работы возвращает true.

Примеры

Пример #1 Пример использования метода Convolve Imagick::morphology()

<?php
$imagick 
$this->getCharacter();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_GAUSSIAN"5,1");
$imagick->morphology(\Imagick::MORPHOLOGY_CONVOLVE2$kernel);
header("Content-Type: image/png");
echo 
$imagick->getImageBlob();

?>

Пример #2 Пример использования метода Correlate Imagick::morphology()

<?php
// Верхний левый пиксель должен быть чёрным.
// Нижний правый пиксель должен быть белым
// На остальное нам всё равно.

$imagick $this->getCharacterOutline();
$kernel = \ImagickKernel::fromMatrix(self::$correlateMatrix, [22]);
$imagick->morphology(\Imagick::MORPHOLOGY_CORRELATE1$kernel);
header("Content-Type: image/png");
echo 
$imagick->getImageBlob();

?>

Пример #3 Пример использования метода Erode Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"3");
$canvas->morphology(\Imagick::MORPHOLOGY_ERODE2$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #4 Пример использования метода Erode Intensity Imagick::morphology()

<?php
$canvas 
$this->getCharacter();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"1");
$canvas->morphology(\Imagick::MORPHOLOGY_ERODE_INTENSITY2$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #5 Пример использования метода Dilate Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"3");
$canvas->morphology(\Imagick::MORPHOLOGY_DILATE4$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #6 Пример использования метода Dilate intensity Imagick::morphology()

<?php
$canvas 
$this->getCharacter();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"1");
$canvas->morphology(\Imagick::MORPHOLOGY_DILATE_INTENSITY4$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #7 Пример использования метода Distance с ядром Chebyshev Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_CHEBYSHEV"3");
$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE3$kernel);
$canvas->autoLevelImage();
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #8 Пример использования метода Distance с ядром Manhattan Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_MANHATTAN"5");
$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE3$kernel);
$canvas->autoLevelImage();
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #9 Пример использования метода Distance с ядром ocatagonal Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGONAL"5");
$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE3$kernel);
$canvas->autoLevelImage();
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #10 Пример использования метода Distance с ядром Euclidean Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_EUCLIDEAN"4");
$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE3$kernel);
$canvas->autoLevelImage();
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #11 Пример использования метода Edge Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"3");
$canvas->morphology(\Imagick::MORPHOLOGY_EDGE1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #12 Пример использования метода Open Imagick::morphology()

<?php
// В результате вы увидите, что "Open" сглаживает контур, округляя все острые точки, и удаляет все части, которые меньше используемой формы.
// Он также отключит или откроет любые тонкие мосты.
$canvas $this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"6");
$canvas->morphology(\Imagick::MORPHOLOGY_OPEN1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #13 Пример использования метода Open intensity Imagick::morphology()

<?php
// В результате вы увидите, что "Open" сглаживает контур, округляя все острые точки, и удаляет все части, которые меньше используемой формы.
// Он также отключит или откроет любые тонкие мосты.

$canvas $this->getCharacter();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"6");
$canvas->morphology(\Imagick::MORPHOLOGY_OPEN_INTENSITY1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #14 Пример использования метода Close Imagick::morphology()

<?php
// Основное использование метода "Close" - уменьшить или удалить любые дыры или пробелы в размере Структурного элемента ядра.
// Это "близкие" части фона примерно такого размера.
$canvas $this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"6");
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #15 Пример использования метода Close Intensity Imagick::morphology()

<?php
// Основное использование метода "Close" - уменьшить или удалить любые дыры или пробелы в размере Структурного элемента ядра.
// Это "близкие" части фона примерно такого размера.
$canvas $this->getCharacter();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"6");
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE_INTENSITY1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #16 Пример использования метода Smooth Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"3");
$canvas->morphology(\Imagick::MORPHOLOGY_SMOOTH1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #17 Пример использования метода Edge in Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"3");
$canvas->morphology(\Imagick::MORPHOLOGY_EDGE_IN1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #18 Пример использования метода Edge out Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON"3");
$canvas->morphology(\Imagick::MORPHOLOGY_EDGE_OUT1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #19 Метод "TopHat", или, точнее, "White TopHat", возвращает пиксели, которые были удалены открытием фигуры, то есть пиксели, которые были удалены для округления точек, и соединение, соединённое мостом между фигурами. Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"5");
$canvas->morphology(\Imagick::MORPHOLOGY_TOP_HAT1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #20 Метод "TopHat", или, точнее, "Black TopHat", возвращает пиксели, которые были удалены закрытием фигуры, то есть пиксели, которые использовались для заполнения дыр, зазоров и мостов. Imagick::morphology()

<?php

$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"5");
$canvas->morphology(\Imagick::MORPHOLOGY_BOTTOM_HAT1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #21 Пример использования метода Hit и Miss Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
// Находит все пиксели с 3 пикселями правого края
$matrix = [[1falsefalse0]];
$kernel = \ImagickKernel::fromMatrix(
    
$matrix,
    [
00]
);
$canvas->morphology(\Imagick::MORPHOLOGY_HIT_AND_MISS1$kernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #22 Пример использования метода Thinning Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$leftEdgeKernel = \ImagickKernel::fromMatrix([[01]], [10]);
$rightEdgeKernel = \ImagickKernel::fromMatrix([[10]], [00]);
$leftEdgeKernel->addKernel($rightEdgeKernel);

$canvas->morphology(\Imagick::MORPHOLOGY_THINNING3$leftEdgeKernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #23 Пример использования метода Thicken Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$leftEdgeKernel = \ImagickKernel::fromMatrix([[01]], [10]);
$rightEdgeKernel = \ImagickKernel::fromMatrix([[10]], [00]);
$leftEdgeKernel->addKernel($rightEdgeKernel);

$canvas->morphology(\Imagick::MORPHOLOGY_THICKEN3$leftEdgeKernel);
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #24 Пример использования метода Thick для создания выпуклой оболочки Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$diamondKernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND"1");
$convexKernel =  \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_CONVEX_HULL"");

// Утолщённая морфология не справляется с небольшими зазорами.
// Закрываем их близкой морфологией.
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE1$diamondKernel);
$canvas->morphology(\Imagick::MORPHOLOGY_THICKEN, -1$convexKernel);
$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE1$diamondKernel);

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

?>

Пример #25 Пример использования метода Iterative morphology Imagick::morphology()

<?php
$canvas 
$this->getCharacterOutline();
$kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK"2");
$canvas->morphology(\Imagick::MORPHOLOGY_ITERATIVE3$kernel);
$canvas->autoLevelImage();
header("Content-Type: image/png");
echo 
$canvas->getImageBlob();

?>

Пример #26 Пример использования вспомогательной функции для получения силуэта изображения Imagick::morphology()

<?php
private function getCharacterOutline() {

    
$imagick = new \Imagick(realpath("./images/character.png"));
    
$character = new \Imagick();
    
$character->newPseudoImage(
        
$imagick->getImageWidth(),
        
$imagick->getImageHeight(),
        
"canvas:white"
    
);
    
$canvas = new \Imagick();
    
$canvas->newPseudoImage(
        
$imagick->getImageWidth(),
        
$imagick->getImageHeight(),
        
"canvas:black"
    
);

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

    return 
$canvas;
}

?>

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top