如何在不使用exec功能的情况下制作平铺图像帧?

时间:2017-06-04 00:46:45

标签: php image-processing imagemagick gd imagick

原始图片: Original image 这就是我需要的: Here what i need 它应该从这个小瓷砖创建: It should be created from this small tile

很多人建议使用ImageMagick解决方案(使用php exec功能) - http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=21867

convert frame_template.gif \
-tile blackthin_top.gif -draw 'color 1,0 floodfill' -rotate 90 \
-tile blackthin_btm.gif -draw 'color 1,0 floodfill' -rotate 90 \
-tile blackthin_top.gif -draw 'color 1,0 floodfill' -rotate 90 \
-tile blackthin_btm.gif -draw 'color 1,0 floodfill' -rotate 90 \
-gravity center thumbnail.gif -composite frame_filled.gif

PICFrame解决方案(使用php exec函数) - http://www.fmwconcepts.com/imagemagick/picframe/index.php

picframe [-f frameid] [-m mattesize] [-c mattecolor] [-b bordersize] [-s shade] [-a adjust] [-o opacity ] [-d distance] infile outfile

PHP imagick具有很好的创建颜色边框的能力:

$imagick = new \Imagick('image.jpg');
$imagick->scaleImage(300, 300, false);

// Create frame placeholder
$imagick->frameimage( 'red','30','30', 30, 0);

// Flood fill with color
$imagick->floodFillPaintImage('green', 10, '#6e0000',0, 0,false
);

header("Content-Type: image/jpg");
echo $imagick->getImageBlob();

但PHP imagick不能使用您自己的图像拼贴来创建框架,只能使用纯色。这是一个非常相关的问题 - How to flood fill the frame with a pattern image using imagick php class?

另一个很好的解决方案来自 - https://stackoverflow.com/a/28778953/2337706但它会从大的PNG帧中创建图像,你应该知道正确的图像大小。

我知道我可以使用php GD创建它 - http://php.net/manual/en/ref.image.php但我不知道如何以这种方式实现它。

1 个答案:

答案 0 :(得分:0)

在ImageMagick中,你可以做一些简单的事情:

         if (dontAllowTimeElapse) {
            elapsed = 0;
          }
          before = now;
          earth.setCenter([c[0], c[1] + 0.1*(elapsed/30)]);
          dontAllowTimeElapse = false;
          requestAnimationFrame(animate);

enter image description here

这些命令应该很容易转换成Imagick。请参阅http://us3.php.net/manual/en/imagick.frameimage.phphttp://us3.php.net/manual/en/imagick.chopimage.php以及http://us3.php.net/manual/en/imagick.borderimage.php

或者简单地说:

convert a1Wit.jpg -mattecolor black -frame 10x10+3+3 -gravity west -chop 3x0 -bordercolor gold -border 3 frame_result.jpg

enter image description here

或者

convert a1Wit.jpg -bordercolor black -border 7 -bordercolor "gray(35%)" -border 3 -bordercolor "#D0A456" -border 3 frame_result2.jpg

enter image description here

或者

convert a1Wit.jpg -mattecolor "gray(30%)" -frame 13x13+5+5 -gravity northwest -shave 5x5 -bordercolor "#D0A456" -border 3 frame_result3.jpg

enter image description here

根据需要调整颜色厚度