我正在创建一个小型网络应用程序,人们可以在其中为赛车的不同部分选择颜色。我正在使用 ImageMagick 为汽车的每个部分拍摄单独的图像,对它们重新着色(使用 clutImage 函数),然后将它们叠加在一起以创建最终图像。
每个图像都是具有 alpha 透明度的 PNG-24。每个图像的大小完全相同,以便更容易组合它们。
大约有十层,其中六层正在重新着色。问题是性能有点差;每次颜色更改后,渲染图像大约需要十秒钟。这是我的代码:
示例代码:
<?php
if(isSet($piece['color'])) {
//make a 1pixel image to replace color with
$clut = new Imagick();
$clut->newImage(1, 1, new ImagickPixel("#".$piece["color"]));
//change the color of the part
$car_part->clutImage($clut);
}
//now we need to add the part onto the car
$car->compositeImage($car_part, Imagick::COMPOSITE_DEFAULT, 0, 0);
clutImage 似乎对这项任务来说可能是矫枉过正;我不是在做渐变图,我只是用纯色替换所有彩色像素。然而,无论我使用什么功能,它可能仍然需要迭代超过几百万像素。
有没有更有效的方法来实现这一点,或者这只是我想要做的事情的本质?