1. 程式人生 > >gd庫處理圖片(將正方形轉換圓形) (調整 頭像大小)(文字圖片合併)(建立畫布)

gd庫處理圖片(將正方形轉換圓形) (調整 頭像大小)(文字圖片合併)(建立畫布)

/* 正方形轉換圓形圖片
 *  $url 小圖 (絕對路徑)
 *  $background 背景圖 (絕對路徑)
 * */
function circular($url,$background){
    $w = $h = 56;/* 頭像大小 */
    $c = imagecolorallocate($url, 255, 0, 0);
    imagearc($url, $w/2, $h/2, $w, $h, 0, 360, $c);
    imagefilltoborder($url, 0, 0, $c, $c);
    imagefilltoborder($url, $w, 0, $c, $c);
    imagefilltoborder($url, 0, $h, $c, $c);
    imagefilltoborder($url, $w, $h, $c, $c);

    imagecolortransparent($url, $c); //!!!!

    $dm = imagecreatefromstring(file_get_contents($background));
    imagecopymerge($dm, $url, 141,187, 0, 0, $w, $h, 100);
    return $dm;
}
/*
 *  調整 頭像大小
 *  $srcImage 圖片路徑 (絕對路徑)
 *  $maxwidth 動態設定圖片寬度
 *  $maxheight 動態設定圖片高度
 *  $name   後期追擊引數 (動態設定圖片名稱)
 * */
function resizeImage($srcImage,$maxwidth,$maxheight,$name=1)
{
    list($width, $height, $type, $attr) = getimagesize($srcImage);
    switch ($type) {
        case 1:
            $img = imagecreatefromgif($srcImage);
            break;
        case 2:
            $img = imagecreatefromjpeg($srcImage);
            break;
        case 3:
            $img = imagecreatefrompng($srcImage);
            break;
        default:
            $img = imagecreatefrompng($srcImage);
            break;
    }
    $canvas = imagecreatetruecolor($maxwidth,$maxheight); // 建立一個真彩色影象 我把它理解為建立了一個畫布

    imagecopyresampled($canvas,$img,0,0,0,0,$maxwidth,$maxheight,$width,$height);
    // 選取原圖片整個長寬上的畫素,將原圖片左上角和畫布左上角對齊,畫布寬100px,高100px。
    // 這樣設定是縮小或放大原圖片。 如果原圖片寬或高比畫布大就會縮小,如果原圖片寬或高比畫布小就會放大。
    // 如果想擷取圖片,不想放大或縮小。 就要將最後兩個引數設定成分別和畫布寬和高相等。 像這樣:imagecopyresampled($canvas,$sourceImage,0,0,0,0,$newWidth,$newHeight,$newWidth,$newHeight);
    // 如果想控制從哪裡開始擷取,就要設定後面兩個“0”。 前面一個“0”是原圖片上X軸座標,後面一個是Y軸座標。 比如,想從原圖片X軸100px,Y軸50px的點開始擷取。就要這樣設定:imagecopyresampled($canvas,$sourceImage,0,0,100,50,$newWidth,$newHeight,$newWidth,$newHeight);
    return $canvas;//返回引數為已經開啟的圖片格式
}
/* 文字圖片合併
 *  $filename 圖片路徑
 *  $write     文字
 *  $leftOffset     左邊距
 *  $rightOffset    上邊距
 */
function wenzi($filename,$write='無名者',$leftOffset=10,$rightOffset=30){
			$qCodeImg = imagecreatefromstring(file_get_contents('./1.png'));
			$font = './simsun.ttc';//字型
			$black = imagecolorallocate($qCodeImg, 0x00, 0x00, 0x00);//字型顏色
			imagefttext($qCodeImg, 13, 0, $leftOffset, $rightOffset, $black, $font,$write);
			//ob_start();
			header('Content-Type:image/png');
			imagepng($qCodeImg);
			imagedestroy($qCodeImg);
			//$data = ob_get_clean();
			//$qr = "data:image/png;base64,".base64_encode($data);
			//return $qr;

	}
/*
        * 建立畫布併合並
        *
        *
        * */
        function test(){
            $w = 50;//圖片與畫布左間距
            $h = 50;//圖片與畫布上間距
            $canvas_k = 370;//畫布寬度
            $canvas_g = 650;//畫布高度
            $bigImg = imagecreatetruecolor($canvas_k,$canvas_g);/* 建立畫布 */
            //增加一個白色的底,不然新建的畫布是黑色的
            $white = imagecolorallocate($bigImg, 255, 255, 255);
            imagefill($bigImg, 0, 0, $white);

            $qCodeImg = imagecreatefromstring(file_get_contents('./1.png'));

            list($qCodeWidth, $qCodeHight) = getimagesize('./1.png');
            //$qCodeWidth 圖片的寬度 $qCodeHight 圖片的高度(超出圖片本身大小,則會由黑色底部填充)
            imagecopy($bigImg,$qCodeImg, $w,$h, 0, 0,$qCodeWidth, $qCodeHight);

            //輸出圖片
            header("Content-type: image/png");
            imagepng($bigImg);
        }