ホームページ  >  記事  >  バックエンド開発  >  PHP で写真を切り取って mysql に保存する

PHP で写真を切り取って mysql に保存する

WBOY
WBOYオリジナル
2016-08-08 09:30:331089ブラウズ
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 がリソース タイプの画像データです ここで問題が発生します。上記のコードに注目してください。file_get_contents によって返される型は string であり、base64_encode のパラメータ型でもあります。 リソースを文字列型に変換する方法。 勉強した結果、PHPには出力バッファの内容を文字列の形式で返す
string ob_get_contents ( void )
という関数があることが分かりました。
したがって、アイデアは、リソース画像をバッファーに出力し、オブジェクトを使用してそのコンテンツを取得することです。コードは以下の通りです
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 は出力バッファであり、PHP において非常に重要で便利なツールですphp.net を参照してください

上記では、PHP で写真を切り取って mysql に保存する方法を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。