尝试拍摄矩形照片,将其裁剪成方形区域,然后将其遮盖成具有透明背景的圆形.
//$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}
粗略的预期产量:
图像我看起来大致像输入图像.
对于那些使用较旧版本的Imagick(版本低于6.2.9不存在setimagematte)的人,我提出了一个简单的解决方案.这里的事情是将遮罩的不透明度复制到原始图像.
$base = new Imagick('original.jpg');
$mask = new Imagick('mask.png');
$base->compositeImage($mask, Imagick::COMPOSITE_COPYOPACITY, 0, 0);
$base->writeImage('result.png');
Run Code Online (Sandbox Code Playgroud)
你可以使用一个Imagick黑色圆圈作为面具,但我虽然不完美,所以我使用了自己的.
当然,你肯定要重新调整/裁剪你的图像,但这是另一个故事.
希望这可以帮助.
J.
归档时间: |
|
查看次数: |
8297 次 |
最近记录: |