我尝试重新创建一个脚本,使用ImageMagick命令"转换"来组成图像.但我想在PHP中使用Imagick(版本6.6.2-10)做同样的事情.
命令如下:
convert A1.mpc A3.mpc A4.mpc -channel rgba -alpha on -virtual-pixel background -background none -define compose:args=312x26.6776 -compose displace -composite out.mpc
Run Code Online (Sandbox Code Playgroud)
我发现参数代表以下内容:
convert {background} {overlay} [{mask}] [-compose {method}] -composite {result}
Run Code Online (Sandbox Code Playgroud)
PHP Imagick给了我一个compose方法,但是没有mask参数:http://www.php.net/manual/en/imagick.compositeimage.php
我发现了另一个问题并尝试了这个(但不会产生相同的图像):
// load images
$a1 = new Imagick('a1.png');
$a3 = new Imagick('a3.png');
$a4 = new Imagick('a4.png');
// mask the overlay
$a1->compositeImage($a4, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
// compose overlay to background
$a1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BACKGROUND);
$a1->setImageBackgroundColor(new ImagickPixel('none'));
$a1->setOption('compose:args', '312x26.6776');
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这是使用蒙版构图的正确方法吗?或者这里有什么问题?
为了帮助可视化我想要做的事情,这里有一些输入图像:
输入图像a1(背景):
输入图像a3(叠加):
输入图像a4(掩码):
我想要的结果是: …
如何在png图像周围添加边框?每当我尝试添加边框采用borderImage可用功能imagick它失去了它的透明度,如果它是一个PNG图像.
<?php
$image = new Imagick();
$image->readImage('tux.png');
$image->BorderImage(new ImagickPixel("red") , 5,5);
// send the result to the browser
header("Content-Type: image/" . $image->getImageFormat());
echo $image;
Run Code Online (Sandbox Code Playgroud)
这是原始图片:
这是在添加边框之后:
边框颜色也应用于背景.我想用imagick做到这一点如何在不失透明度的情况下将边框应用于透明图像?
是否可以拍摄此图片:
image1 http://i34.tinypic.com/2d8neo0.png
并应用此面具:
面具http://i35.tinypic.com/2091450.png
把它变成这个:
image2 http://i37.tinypic.com/23m7apv.png
使用GD还是Imagick?我知道可以使用形状来掩盖图像,但我不确定如何继续使用预先创建的透明图像.:■
我有两个图像(两个图)一个是普通地图,一个是有图钉的地图.
图一
图像二
我试图将它们相互减去,所以我只留下了作为透明png的引脚.
我已经取得了一些成功,并设法将引脚作为自己的图像,问题是颜色不太正确(见图3).
图三
我正在使用Imagick这样做,我的代码如下
<?php
// load in the base image into Imagick
$imageOne = new Imagick('images/base-map.png');
$imageTwo = new Imagick('images/pins/location-7.png');
$imageOne->compositeImage($imageTwo, Imagick::COMPOSITE_DIFFERENCE, 0, 0);
$imageOne->paintTransparentImage($imageOne->getImagePixelColor(0, 0), 0, 5000);
header('Content-Type: image/png');
echo $imageOne;
Run Code Online (Sandbox Code Playgroud)
有谁知道如何整理/调整这个以使颜色与原始图像相匹配?
谢谢!
尝试拍摄矩形照片,将其裁剪成方形区域,然后将其遮盖成具有透明背景的圆形.
//$dims is an array with the width, height, x, y of the region in the rectangular image (whose path on disk is $tempfile)
$circle = new \Imagick();
$circle->newImage($dims['w'], $dims['h'], 'none');
$circle->setimageformat('png');
$circle->setimagematte(true);
$draw = new \ImagickDraw();
$draw->setfillcolor('#ffffff');
$draw->circle($dims['w']/2, $dims['h']/2, $dims['w']/2, $dims['w']);
$circle->drawimage($draw);
$imagick = new \Imagick();
$imagick->readImage($tempfile);
$imagick->setImageFormat( "png" );
$imagick->setimagematte(true);
$imagick->cropimage($dims['w'], $dims['h'], $dims['x'], $dims['y']);
$imagick->compositeimage($circle, \Imagick::COMPOSITE_DSTIN, 0, 0);
$imagick->writeImage($tempfile);
$imagick->destroy();
Run Code Online (Sandbox Code Playgroud)
结果是矩形图像,未被切割并且没有被环化.我究竟做错了什么?
示例图片:
$ dims的示例输入= {"x":253,"y":0,"x2":438.5,"y2":185.5,"w":185.5,"h":185.5}
粗略的预期产量:
图像我看起来大致像输入图像.