laravel 友好的圖片處理庫 Intervention Image 可以繪製圓形(circle()), 但是好像並不能將即存的圖片裁剪成圓形, 這裡提供一個基於 GD 庫的正圓形裁剪
/**
* 獲取圓
*
* @param $imgPath 圖片網路路徑, 本地路徑
* @return resource
* @author 19/1/29 CLZ.
*/
private function _circleImg($imgPath)
{
$src_img = imagecreatefromjpeg($imgPath);
list($w, $h) = getimagesize($imgPath);
$w = $h = min($w, $h);
$img = imagecreatetruecolor($w, $h);
imagesavealpha($img, true);
// 拾取一個完全透明的顏色,最後一個引數127為全透明
$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
imagefill($img, 0, 0, $bg);
$r = $w / 2; // 圓的半徑
for ($x = 0; $x < $w; $x++) {
for ($y = 0; $y < $h; $y++) {
$rgbColor = imagecolorat($src_img, $x, $y);
if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r)))
imagesetpixel($img, $x, $y, $rgbColor);
}
}
imagedestroy($src_img);
return $img;
}
原理很簡單, 建立一個 png 的透明底圖 $bg
, 然後將原圖片 $src_img
中的圓形部分全部填充到底圖當中, 剩餘部分略過.
同理可以生成橢圓形, 圓角圖片等比較有意思的圖片.