Start · Sprachen · PHP · Referenz · ImagickKernel

ImagickKernel

Klasse

Repräsentiert einen Convolution-Kernel für morphologische und filterbasierte Bildoperationen mit der <code>Imagick</code>-Erweiterung.

seit PHP 3.3.0 Kategorie: image

Signatur

class ImagickKernel

Beschreibung

ImagickKernel kapselt eine Matrix (den sogenannten Kernel), die bei morphologischen Operationen und Faltungsfiltern (Convolution) auf ein Bild angewendet wird. Kernels definieren, wie jeder Pixel in Relation zu seinen Nachbarpixeln verändert wird – typische Anwendungsfälle sind Weichzeichnen, Schärfen, Kantenerkennung oder Morphologie-Operationen wie Erosion und Dilatation.

Über statische Factory-Methoden wie ImagickKernel::fromBuiltin() lassen sich vordefinierte Kernel-Typen (z. B. Gaußsche Glättung, Laplace-Filter) erzeugen. Mit ImagickKernel::fromMatrix() kann eine beliebige numerische Matrix als Kernel definiert werden. Der erzeugte Kernel wird anschließend an Methoden wie Imagick::morphology() oder Imagick::filter() übergeben.

Mehrere Kernel-Objekte können mithilfe von addKernel() zu einer verketteten Liste kombiniert werden, was komplexe Multi-Schritt-Filter in einem einzigen Aufruf ermöglicht. Mit scale() und separate() lassen sich Kernels nachträglich normalisieren oder aufteilen.

ImagickKernel erfordert die PHP-Erweiterung imagick ab Version 3.3.0 sowie eine zugrunde liegende ImageMagick-Bibliothek ab Version 6.8.6.

Beispiele

Gaußschen Weichzeichner-Kernel anwenden

<?php
// Bild laden
$imagick = new Imagick('foto.jpg');

// Vordefinierten Gaußschen Kernel erzeugen (Radius 2, Sigma 1.5)
$kernel = ImagickKernel::fromBuiltin(
    Imagick::KERNEL_GAUSSIAN,
    '2x1.5'
);

// Kernel als Convolution-Filter auf das Bild anwenden
$imagick->filter($kernel);

// Ergebnis speichern
$imagick->writeImage('foto_blur.jpg');
echo "Weichzeichner erfolgreich angewendet.";
$imagick->destroy();
Weichzeichner erfolgreich angewendet.

Eigenen Schärfungs-Kernel aus Matrix erstellen

<?php
// Benutzerdefinierter Schärfungs-Kernel (3x3 Laplace-Schärfung)
$matrix = [
    [ 0, -1,  0],
    [-1,  5, -1],
    [ 0, -1,  0],
];

// Kernel aus Matrix erzeugen; Ursprung (origin) ist die Mitte
$kernel = ImagickKernel::fromMatrix($matrix, new ImagickPixel('none'));

$imagick = new Imagick('foto.jpg');

// Morphology-Convolve anwenden
$imagick->morphology(
    Imagick::MORPHOLOGY_CONVOLVE,
    1,
    $kernel
);

$imagick->writeImage('foto_sharp.jpg');
echo "Schärfungs-Kernel erfolgreich angewendet.";
$imagick->destroy();
Schärfungs-Kernel erfolgreich angewendet.

Zwei Kernel verketten (Multi-Step-Filter)

<?php
// Zwei vordefinierte Kernels erzeugen
$blur = ImagickKernel::fromBuiltin(Imagick::KERNEL_GAUSSIAN, '1x1');
$edge = ImagickKernel::fromBuiltin(Imagick::KERNEL_LAPLACIAN, '0');

// Kernel verketten: edge wird nach blur ausgeführt
$blur->addKernel($edge);

$imagick = new Imagick('foto.jpg');
$imagick->morphology(Imagick::MORPHOLOGY_CONVOLVE, 1, $blur);
$imagick->writeImage('foto_edge.jpg');
echo "Verketteter Filter angewendet.";
$imagick->destroy();
Verketteter Filter angewendet.

// Wichtig · Fallstricke

Verfügbarkeit: ImagickKernel steht erst ab imagick-Extension 3.3.0 und ImageMagick >= 6.8.6 zur Verfügung. Ältere Installationen kennen diese Klasse nicht – prüfe die Version mit phpinfo() oder Imagick::getVersion().

Kernel-Normalisierung: Bei eigenen Matrizen empfiehlt es sich, ImagickKernel::scale() mit dem Flag Imagick::NORMALIZE_KERNEL_VALUE aufzurufen, um Helligkeitsverschiebungen im Ausgabebild zu vermeiden.

Ressourcen: Imagick-Objekte verbrauchen nativen Speicher. Rufe nach der Verwendung stets Imagick::destroy() auf, um Speicherlecks zu verhindern.

Ursprungspunkt (Origin): Bei fromMatrix() wird der Ursprung standardmäßig automatisch in die Mitte der Matrix gesetzt; bei geraden Dimensionen kann das Verhalten abweichen – teste das Ergebnis sorgfältig.