首頁  >  文章  >  後端開發  >  PHP裁剪圖片並存入mysql

PHP裁剪圖片並存入mysql

WBOY
WBOY原創
2016-08-08 09:30:331090瀏覽
使用 PHP 處理圖片時,常常需要對其進行裁切。 如何將裁剪後的圖片存入 mysql 資料庫是一個有趣的問題。 首先,獲得上傳後文件:
$picFile = $_FILES["picFileName"];
$picType = $picFile["type"];  
$picData = file_get_contents($tempFile);  
如果不需要更改圖片大小而直接存入mysql,可以如下簡單實現
$tempFile = $picFile["tmp_name"];  
$picData = base64_encode($picData);  

$query = "INSERT INTO image  
   (imgid, image, imgtype) 
   values( 
       null, 
       '$picData', 
       '$picType' 
    );"; 
$link->query($query);
但如果要更改圖片大小並以字符流的形式獲得圖片數據,則需要一點小技巧:
先完成裁切圖片,取得圖片物件
list($picW, $picH) = getimagesize($tempFile);  
if($picW>600){ //超出大小  
    $src = imagecreatefromjpeg($tempFile); //获取原图数据  
    $nW =550;  
    $nH = $picH*$nW/$picW;  
    $newPicTemp = imagecreatetruecolor($nW,$nH);  //创建彩色图片对象  
    imagecopyresampled($newPicTemp,$src,0,0,0,0,$nW,$nH,$picW,$picH);  
}
這一步驟以後newPicTemp 是resource 型的圖片資料了,問題來了,觀察上方程式碼,file_get_contents 回傳的型別是string,也是base64_encode 的參數型別。 如何把 resource 轉為 string 類型呢。 經過學習發現 PHP 有個這個函數
string ob_get_contents ( void )
以字串的形式傳回輸出緩衝區中的內容。
因此,想法就是把 resource 圖片輸出到緩衝區,然後用一個物件取得其內容。代碼如下
ob_start(); //开启输出缓冲区  
imagejpeg($newPicTemp); //这个函数可以显示出图片,同时也是把数据输出  
$imgContent = ob_get_contents(); //获取字符流  
ob_end_clean();  //关闭并清除缓冲区  

$picData = base64_encode($imgContent); //不要忘记转码
這樣一來,就獲得更改大小後的圖片字符流了,可以存入mysql
最後銷毀臨時數據
imagedestroy($src);  
imagedestroy($newPicTemp);
如果需要讀取並顯示圖片,可以使用如下代碼
$query = "SELECT image, imgtype from image where imgid = $imgid ;";  
$result = $link->query($query);  
$row = mysqli_fetch_array($result);  
$data = base64_decode( $row["image"]);  
$type = $row["imgtype"];  
  
ob_clean();  
header("Content-Type:'$type'");  
echo $data;  
可以看出幾個關鍵函數都含有ob 標識。 ob 即 output buffer,是 PHP 非常關鍵且有用的工具參考 php.net

以上就介紹了PHP裁剪圖片並存入mysql,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn