基於 GD 庫生成圓形頭像

left發表於2019-01-29

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 中的圓形部分全部填充到底圖當中, 剩餘部分略過.

同理可以生成橢圓形, 圓角圖片等比較有意思的圖片.

圓形圖片

相關文章