我处理gif图片。有时我需要调整大小,删除一些幻灯片或绘制文本。在示例中,我绘制了50张具有不同颜色和大小的gif图像幻灯片。当我绘制1 x 1像素或500 x 500的图像时,会得到相同的生成时间。怎么可能 ?当我绘制图片超过2000 x 2000时,生成时间会增加。但是小尺寸有什么问题呢?
function DrawSlides($width, $height) {
$savePath = 'imagick.gif';
$colors = [
'#FFFAFA',
'#6A5ACD',
'#EE3B3B',
'#4EEE94',
'#7EC0EE',
'#EEE685',
'#FFA500',
'#FAFAFA',
'#FFA54F',
'#242424',
'#CD3333',
];
$time = microtime(true);
$backgroundColor = $colors[rand(0,10)];
$imagick = new \Imagick();
$imagick->newImage($width, $height, $backgroundColor);
$imagick->setFormat('gif');
$imagick->setImageFormat("gif");
for($i = 0; $i < 50; $i++) {
$backgroundColor = $colors[rand(0,10)];
$tempImagick = new \Imagick();
$tempImagick->newImage($width, $height, $backgroundColor);
$tempImagick->setImageFormat("gif");
$imagick->addImage($tempImagick);
}
$imagick = $imagick->deconstructImages();
echo PHP_EOL . 'all draw generation = ' . round(microtime(true) - $time, 3) . ' seconds';
// 0.2 - 0.3 seconds
$time = microtime(true);
$str = $imagick->getImagesBlob();
// OR
// $imagick->writeImages($savePath, true);
echo PHP_EOL . 'save image = ' . round(microtime(true) - $time, 3) . ' seconds';
// 1.7 - 2.0 seconds
}