PHP ImagickDraw с резьбой

Я пытаюсь использовать ImagickDraw на PHP, чтобы нарисовать изображение с помощью очень большого числа (~100 000) вызовов circle() rectangle() и т. Д. Они разделены на 4 канала cmyk, поэтому каждый канал получает около 30 тыс. Вызовов.

Настоящий circle() а также rectangle() сами вызовы выполняются очень быстро, и вся эта часть программы выполняется менее чем за секунду; тогда я попал в ту часть, где я использую drawImage на каждом из 4 отдельных ImagickDraw объекты, и это занимает>15 секунд для каждого слоя для запуска... понял, что это очень сложное изображение, но есть ли способ ускорить это?

Я рассмотрел использование pthreads, имея отдельный pthread для каждого из 4 ImagickDraw объекты, и это просто вызвало зависание программы:

class Render extends Thread
{
    public $im;
    private $svg;

    public function __construct($width, $height, $bg, $svg)
    {
        $this->im = new Imagick();
        $this->svg = $svg;
        $this->im->newImage($width, $height, $bg);

    }

    public function run()
    {
        $id = new ImagickDraw();
        $id->setVectorGraphics($this->svg);
        $this->im->drawImage($id);
    }
}

$threads = [];
$imarray = [];
foreach($drawar as $c=>$s){
    $threads[$c] = new Render($finalsize['width'], $finalsize['height'], 'white', $s);
    $threads[$c]->start();
}

foreach($threads as $c=>$p){
    $p->join();
    $imarray[$c] = $p->im;
    echo "Got {$c} data\n";
}

Спасибо!

1 ответ

Решение

Я удивлен, что я) работает II) это так быстро.

Я бы посоветовал попытаться забыть сделать так много индивидуальных звонков в Имаджик.

Вместо этого сгенерируйте документ SVG XML вручную, используя соответствующие теги svg circle и rectangle. Затем используйте Imagick для компоновки / преобразования этого изображения в нужный формат выходного изображения.

Я подумал об использовании pthreads, имея отдельный pthread для каждого из 4 объектов ImagickDraw, и это просто вызвало зависание программы:

Да, это не сработает. Базовая библиотека C не совместима с pthreads.

Другие вопросы по тегам