$number = $result['certno'];//設置水印內容 $file = './Uploads/certs/' . $number . '.jpg'; if(!is_file($file)){ $src = './template/public/img/zhengshu.jpg';//定義圖片地址 $info = getimagesize($src);//獲取圖片信息 $type = image_type_to_extension($info[2], false);//經過編號獲取圖片類型 $fun = "imagecreatefrom".$type;//在內存中建立同樣的圖像 $image = $fun($src);//圖片複製到內存 $font = './msyh.ttf';//設置字體路徑 $fontbd = './msyhbd.ttf';//設置字體路徑 $content = $result['authname'];//設置水印內容 $website = $result['auth_domains'];//設置水印內容 //求出水印內容在使用字體下在圖片的四個邊框的xy座標 $version_fontarea1 = ImageTTFBBox(25,0,$fontbd,$version); $content_fontarea1 = ImageTTFBBox(25,0,$font,$content); $website_fontarea1 = ImageTTFBBox(12,0,$font,$website); $width = $info[0];//獲取圖片寬度 //求出內容應該設置在圖片中的位置(y左邊我是本身一點點試的...x座標是讓水印內容兩側距離相等) $version_x = ($width - ($version_fontarea1[2] - $version_fontarea1[0])) / 2; $content_x = ($width - ($content_fontarea1[2] - $content_fontarea1[0])) / 2; $website_x = ($width - ($website_fontarea1[2] - $website_fontarea1[0])) / 2; $color = imagecolorallocatealpha($image, 75, 75, 75, 0);//設置顏色 imagettftext($image, 11, 0, 105, 80, $color, $font, $number); imagettftext($image, 25, 0, $version_x, 350, $color, $fontbd, $version); imagettftext($image, 25, 0, $content_x, 520, $color, $font, $content); imagettftext($image, 12, 0, $website_x, 560, $color, $font, $website); //輸出圖片 $fun = "image".$type; $fun($image, $file , 80); imagedestroy($image); } $data = file_get_contents($file);
代碼中依然存在很大問題,由於這樣的作法,意味着有多少個result,就會在文件夾中生成多少張圖片。沒有找到gd庫直接從內存中獲取圖片內容的方法,無可奈何用這個方法php