imagemagick — конвертирует скрипт очистки доски в переполнение стека

Я пытаюсь конвертировать это Imagemagick скрипт очистки доски на чистый PHP, используя расширение imagick, чтобы избежать необходимости порождать процессы с exec или т.п.

Оригинальный скрипт bash:

#!/bin/bash
convert $1 -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 $2

Я борюсь с исходной матрицей ядра морфологии Convolve, кажется, все остальное работает:

<?php

$channel = null;

$convolveKernel = array(15, 100, 0);
$negateGreys = false;

$blurRadius = 0;
$blurSigma = 1;

$levelBlack = 60; // 60%
$levelGamma = 0.1;
$levelWhite = 91; // 91%

$image = new Imagick($file);

try {
$image->convolveImage($convolveKernel, $channel);
$image->negateImage($negateGreys, $channel);
$image->normalizeImage($channel);
$image->blurImage($blurRadius, $blurSigma, $channel);
$image->levelImage($levelBlack, $levelGamma, $levelWhite, $channel);

header('Content-type: image/jpeg');
echo $image;
} catch (ImagickException $e) {
echo $e->getMessage();
}

Я получаю исключение "The kernel must contain a square number of elements" но меня также интересует масштаб значений уровня черного и белого — это 0-100, 0-255 или 0-65535?

-1

Решение

Расширение PECL Imagick не реализует (или использовать) MagickWand’s MagickMorphologyImage, который является интерфейсом для -morphology Convolve DoG:15,100,0 флаг в оригинальной команде.

Использовать convolveImage, Вы будете скорее всего нужно использовать нечетную матрицу:

Ядро — это матрица, указанная в виде списка целых чисел (без пробелов), разделенных запятыми, упорядоченных слева направо, начиная с верхней строки. В настоящее время поддерживаются только нечетные ядра, и поэтому количество записей в указанном ядре должно быть 32= 9, 52= 25,72= 49 и т. Д.

Но я не думаю, что вы сможете воссоздать его как таковой (по крайней мере, не так качественно, как оригинал), поскольку в флаге оригинала используется вычисленная свертка Разница гауссов (DoG), который вы не сможете воссоздать, используя более простую, более примитивную свертку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]