我试图通过重复在空白1080X1320图像上叠加100X100图像。
$ThumbImg = 'thumb_100x100.png';
$new_image = "new.png";
exec("convert -size 1080x1320! xc:transparent all_images/" . $new_image);
$new_image_path = 'all_images/' . $new_image;
// main image width=1080 ,height = 1320,
// thumb image width = 100 , height = 100,
// row=1320/100=14
// col=1080/100=11
for ($row = 0; $row < 14; $row++)
{
for ($col = 0; $col < 11; $col++)
{
exec('composite -geometry +' . ($col * 100) . '+' . ($row * 100) . ' ' . $ThumbImg . ' ' . $new_image_path . ' ' . $new_image_path);
}
}
当我在版本6.9上使用上面的代码时,它工作正常,100x100图像在空白1080x1320图像上均匀重复。但这不适用于7.0.3版本(最新的IM版本)。
exec
命令需要进行哪些更改才能使其在较新版本上运行?
更新 -
mark-setchell
建议的解决方案适用于某些模式,但是对于后续操作,它不会创建图像,而只会创建空白图像。
更新 -
我们需要在命令中使用-set colorspace RGB
来获得正确的结果。所以命令是
exec('convert new.png -fill thumb.png -set colorspace RGB -draw "color 0,0 reset" result.png');
答案 0 :(得分:1)
我认为使用 ImageMagick 的-fill
运算符在背景上平铺您的100x100图像会更简单。
所以,如果我们创建一个100x100的瓷砖,就像这样重复:
convert -size 100x100 gradient:cyan-magenta tile.png
然后你可以在1080x1320背景上平铺这个:
convert xc:black"[1080x1320]" -fill tile.png -draw "color 0,0 reset" result.png
如果你想在一个命令中生成平铺模式“on-the-fly”,你可以使用内存中的MPR(Magick Pixel Register)来保存填充:
convert -size 100x100 gradient:cyan-magenta -write MPR:tile +delete \
xc:black"[1080x1320]" -fill MPR:tile -draw "color 0,0 reset" result.png
如果您希望继续使用原始composite
命令,则需要使用IM v7按如下方式重新排序参数:
composite new.png -geometry +400+900 tile.png result.png