使用 Intervention/image 包进行图片处理(裁剪成圆形)。怎么把四周的空白去掉?
由于这个包没有裁剪成圆形的(自己一直没找到),然后通过扩展过滤器让他有裁剪成圆形的方法。现在可以裁剪成一个圆,但是我要把四周的白色也去掉(由于创建的是正方形的画布,php好像没有创建圆形的画布)。不知有遇到这样问题的小伙伴吗? 或者哪位大神可以指导一下
过滤器
<?php
namespace Intervention\Image\Filters;
class DemoFilter implements FilterInterface
{
/**
* Default size of filter effects
*/
const DEFAULT_SIZE = 10;
/**
* Size of filter effects
*
* @var integer
*/
private $size;
public $image;
/**
* Creates new instance of filter
*
* @param integer $size
*/
public function __construct($size = null)
{
$this->size = is_numeric($size) ? intval($size) : self::DEFAULT_SIZE;
}
function get_lt_rounder_corner($radius='200')
{
$img = imagecreatetruecolor($radius, $radius); // 创建一个正方形的图像
$bgcolor = imagecolorallocate($img, 255, 255, 255); // 图像的背景
$trans_colour = imagecolorallocatealpha($img, 255, 255, 255, 127);
imageellipse($img,30,30,40,40,$bgcolor);
$fgcolor = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $trans_colour);
imagecolortransparent($img,$trans_colour);
// $radius,$radius:以图像的右下角开始画弧
// $radius*2, $radius*2:已宽度、高度画弧
// 180, 270:指定了角度的起始和结束点
// fgcolor:指定颜色
imagefilledarc($img, $radius, $radius, $radius * 2, $radius * 2, 180, 270, $fgcolor, IMG_ARC_PIE);
// 将弧角图片的颜色设置为透明
imagecolortransparent($img, $fgcolor);
return $img;
}
/**
* Applies filter effects to given image
*
* @param \Intervention\Image\Image $image
* @return \Intervention\Image\Image
*/
public function applyFilter(\Intervention\Image\Image $image)
{
$img=$image->getCore();
$radius = 100;
// lt(左上角)
$lt_corner = $this->get_lt_rounder_corner($radius);
imagecopymerge($img, $lt_corner, 0, 0, 0, 0, $radius, $radius, 100);
// lb(左下角)
$lb_corner = imagerotate($lt_corner, 90, 0);
imagecopymerge($img, $lb_corner, 0, 200 - $radius, 0, 0, $radius, $radius, 100);
// rb(右上角)
$rb_corner = imagerotate($lt_corner, 180, 0);
imagecopymerge($img, $rb_corner, 200 - $radius, 200 - $radius, 0, 0, $radius, $radius, 100);
// rt(右下角)
$rt_corner = imagerotate($lt_corner, 270, 0);
imagecopymerge($img, $rt_corner, 200 - $radius, 0, 0, 0, $radius, $radius, 100);
// $image->pixelate($this->size);
// $image->greyscale();
return $image;
}
}
调用
这是jpg格式导致,存为png试试,看是不是好了:smile:
@丁海军 引用的方法不对(图片四个角其实是白色的,不是透明的)
@jc91715 那已经找到方法了?分享下
@丁海军 不记得在哪找了。制作圆形透明图像
呐 这是代码