在網頁設計中,經常會用到圖片,可以給網頁添加美觀的視覺效果。但是一些看起來不太符合網頁風格的圖片,比如方形圖片,在一些需要美化的地方就顯得比較突兀。這時候,就需要將圖片變成圓形,讓它更符合整個網頁的統一風格。
那么,在使用PHP進行圖片處理時,該如何實現圖片圓形呢?下面就來給大家分享一些方法。
在PHP中,可以使用GD庫實現圖片處理。GD庫是PHP自帶的庫,可以用來處理圖片,包括生成動態圖像等。實現圖片圓形的方法,主要是通過使用GD庫提供的函數,將圖片處理成為對應的圓形形狀。
首先,我們需要先加載要處理的圖片,再使用GD庫提供的函數將圖片處理成圓形。下面是一個基礎的圖片圓形處理代碼:
/** * @param string $imgPath 圖片地址 * @param int $newSize 圖片處理后的尺寸 * @return resource 處理后的圖片資源 */ function trait_img($imgPath,$newSize) { $resourceImg = imagecreatefromjpeg($imgPath); list($width, $height) = getimagesize($imgPath); $res = imagecreatetruecolor($newSize, $newSize); $white = imagecolorallocate($res, 255, 255, 255); imagefill($res, 0, 0, $white); $r = $newSize / 2; for($x = 0; $x< $newSize; $x++) { for ($y = 0; $y< $newSize; $y++) { $rgbColor = imagecolorat($resourceImg, $x, $y); if (($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)<= ($r * $r)) { imagesetpixel($res, $x, $y, $rgbColor); } } } return $res; }這段代碼實現了將圖片變成圓形,并返回處理后的圖片資源。具體的實現方法是,先將圖片資源加載進來,然后再新建一個要輸出的空白圖片($res),并將其背景填充為白色。接著,根據要輸出的圖片尺寸,計算出圓的半徑($r),然后使用雙重循環遍歷所有的像素,進行判斷。如果像素在圓內,就保持原來的顏色,否則就填充為白色。最后返回處理后的圖片資源。 但以上代碼存在一個問題,處理方式并不是最優性的,因為只有和圓形半徑等的像素越過和半徑相切的斜線上的像素直接舍棄了,這并不是一個很完美的處理方式,我們需要用到一種更完美的處理方式——圖形裁剪。 圖形裁剪,是指在圖片的基礎上,按照指定的區域進行裁剪,將裁剪后的區域作為新圖片進行處理。使用圖形裁剪的方式,可以讓輸出的圖片更加完美,不會出現偏差或者填充不足的情況。修改后的代碼如下:
/** * @param string $imgUrl 原圖路徑 * @param int $new_size 新圖片的尺寸 * @return string 處理后的圖片路徑 */ function circle($imgUrl, $new_size) { $img = imagecreatefromjpeg($imgUrl); // 加載圖片 if (!is_resource($img)) { return false; } $w = imagesx($img); // 取得原圖寬高 $h = imagesy($img); $w = $h = min($w, $h); // 取得寬高的最小值,方便圖形縮放 $duo = 1.15; // 飽和調整度 $ws = $w * $duo; $t = ($ws - $w) / 2; $th = $t + $h; $img2 = imagecreatetruecolor($ws, $ws); // 創建新圖 // 填充為白色 $white = imagecolorallocate($img2, 255, 255, 255); imagefill($img2, 0, 0, $white); // 把圖片縮放到新圖 imagecopyresampled($img2, $img, $t, $t, 0, 0, $h, $h, $h, $h); $thumb_d = $ws * 0.5; // 縮略圖半徑 // 新建一張圓形透明圖 $thumb = imagecreatetruecolor($thumb_d, $thumb_d); imagesavealpha($thumb, true); //填充透明色 $transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127); imagefill($thumb, 0, 0, $transparent); //設置透明光度 $transparent = imagecolortransparent($thumb, $transparent); imagefill($img2, 0, 0, $transparent); // 在縮略圖上畫出圓形,放置出現拐角 imageArc($thumb, $thumb_d * 0.5, $thumb_d * 0.5, $thumb_d, $thumb_d, 0, 360, $transparent); imagefill($thumb, 0, 0, $transparent); imagecolortransparent($thumb, $transparent); // 進行圖形覆蓋處理 imagecopymerge($img2, $thumb, $t, $t, 0, 0, $thumb_d, $thumb_d, 100); $savePath = "uploads/". date('YmdHis') . "-". rand(100, 999) . ".jpeg"; imagejpeg($img2, $savePath, 85); return $savePath; }以上代碼實現了將圖片變成圓形,并將處理后的圖片保存到指定目錄下。具體的實現方法是,首先將原圖進行縮放,將其調整為正方形,并把長度調整為飽滿的1.15倍。接著,新建一個縮略圖,然后在縮略圖上畫出一個完整的圓形。最后將縮略圖與原圖進行圖形覆蓋處理,輸出處理后的圖片。 總的來說,在使用PHP進行圖片圓形處理時,需要使用到GD庫提供的函數。不僅如此,如果圖片太大,導致圓形不夠圓潤,還需要進行圖形裁剪,讓輸出的圓形更加完美。