在WEB開發(fā)中,圖片展示一頁內(nèi)容的重要組成部分,同樣所有圖片的展示方式也是決定了網(wǎng)站美觀度的重要因素。PHP是一種非常優(yōu)秀的用于WEB服務器開發(fā)的程序語言,針對圖片處理這塊,PHP擁有非常豐富的擴展庫可以使用,可以使圖像處理變得非常簡單便捷。本文將會描述其中一種使用PHP實現(xiàn)的圖片圓滑效果。
當處理圖片時,我們通常會想到的方法就是圖片磨細,以及使用某種算法改變圖片的度量空間,這樣可以使圖片變得更平滑。但是對于一些素材里包含了圓形等特殊形態(tài),單純這種方法就難以達到圓滑的效果。這時,就需要使用一些特殊的方法去處理,實現(xiàn)圖片圓滑效果。下面是這種處理方法的示例代碼:
<?php // 圖片的大小 $width = 200; $height = 200; // 創(chuàng)建畫布 $img = imagecreatetruecolor($width, $height); // 創(chuàng)建畫筆 $bg_color = imagecolorallocate($img, 0xFF, 0xFF, 0xFF); $fill_color = imagecolorallocate($img, 0x98, 0x77, 0xBC); // 繪制圓形 imagefilledellipse($img, $width / 2, $height / 2, $width, $height, $fill_color); imagesetthickness($img, 5); imageellipse($img, $width/2, $height/2, $width-10, $height-10, $bg_color); // 取得圖片的base64碼 ob_start(); imagepng($img); $contents = ob_get_contents(); ob_end_clean(); $imgString = 'data:image/png;base64,' . base64_encode($contents); echo '<img src="' . $imgString . '"/>'; ?>基本上,以上代碼就是生成了一個PNG格式的圖片,圖片的大小為200x200像素,同時在圖片中間繪制了一個半徑當100像素的圓形,圓形中間填充顏色,然后再繪制一個白色的半徑為95像素的空心圓形。 這樣就基本實現(xiàn)了圖片圓滑效果,但是這種單獨的處理方法在實際的場景中并不夠用。在實際業(yè)務中,通常會用到帶有復雜背景的圖片。例如下面這樣一張圖片:我們需要通過PHP實現(xiàn)圖片效果圓滑的操作,就需要對這樣的圖片進行處理。首先我們會想到用到透明度,將圖片填充的圓形顏色改成透明,然后再將之前圓形內(nèi)的圖像粘貼進去。
<?php $width = 200; $height = 200; // 創(chuàng)建畫布 $img = imagecreatetruecolor($width, $height); // 創(chuàng)建畫筆 $bg_color = imagecolorallocate($img, 0xFF, 0xFF, 0xFF); $fill_color = imagecolorallocatealpha($img, 0, 0, 0, 127); // 繪制圓形 imagefilledellipse($img, $width / 2, $height / 2, $width, $height, $fill_color); imagesetthickness($img, 5); imageellipse($img, $width/2, $height/2, $width-10, $height-10, $bg_color); // 原圖 $oriImg = './images/image1.jpg'; // 創(chuàng)建原圖 $orig = imagecreatefromjpeg($oriImg); // 重新繪制圓形 $clip = imagecreatetruecolor($width, $height); imagealphablending($clip, false); imagesavealpha($clip, true); $trans_color = imagecolorallocatealpha($clip, 0, 0, 0, 127); imagefill($clip, 0, 0, $trans_color); imagefilledellipse($clip, $width / 2, $height / 2, $width-10, $height-10, $bg_color); // 將原圖拷貝到圓形內(nèi) imagecopy($clip, $orig, 0, 0, 0, 0, $width, $height); // 合成圖片 imagecopymerge($img, $clip, 0, 0, 0, 0, $width, $height, 100); // 取得圖片的base64碼 ob_start(); imagepng($img); $contents = ob_get_contents(); ob_end_clean(); $imgString = 'data:image/png;base64,' . base64_encode($contents); echo '<img src="' . $imgString . '"/>'; ?>以上的代碼的基本思路就是創(chuàng)建一個透明的圓形畫布,再將原始圖片拷貝到這一畫布內(nèi),最后再將原本的圓形畫布繪制到其中,實現(xiàn)圖片的圓滑效果。 最終效果展示:盡管圓滑效果的代碼實現(xiàn)非常簡單,但是在PHP中還是有相當多的選項可供調(diào)整。因此在實際使用中,我們可以依據(jù)場景需要進行調(diào)整,選擇最適合的圖片圓滑效果方式來展示圖像。