我正在尝试在 PHP 上使用 ImagickDraw 来使用非常大量(~100,000)的 circle() rectangle() 等调用来绘制图像。这些在 4 个 cmyk 通道之间拆分,因此每个通道大约有 30k 调用。
实际circle()
和rectangle()
调用本身非常快,程序的整个部分在不到一秒的时间内运行;然后我点击了我drawImage
在 4 个单独ImagickDraw
对象中的每一个上使用的部分,这需要超过 15 秒才能运行每一层......明白这是一个非常复杂的图像,但有什么办法可以加快速度吗?
我考虑过使用 pthread,为 4 个ImagickDraw
对象中的每一个都有一个单独的 pthread,这只是导致程序挂起:
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";
}
谢谢!