在imagemagick的新版本中覆盖和重复图像与空白图像

时间:2016-11-16 07:29:00

标签: imagemagick

我试图通过重复在空白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建议的解决方案适用于某些模式,但是对于后续操作,它不会创建图像,而只会创建空白图像。

Lining pattern image

更新 -

我们需要在命令中使用-set colorspace RGB来获得正确的结果。所以命令是

exec('convert new.png -fill thumb.png -set colorspace RGB -draw "color 0,0 reset" result.png');

1 个答案:

答案 0 :(得分:1)

我认为使用 ImageMagick -fill运算符在背景上平铺您的100x100图像会更简单。

所以,如果我们创建一个100x100的瓷砖,就像这样重复:

convert -size 100x100 gradient:cyan-magenta tile.png

enter image description here

然后你可以在1080x1320背景上平铺这个:

convert xc:black"[1080x1320]"  -fill tile.png -draw "color 0,0 reset" result.png

enter image description here

如果你想在一个命令中生成平铺模式“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