Heim >Backend-Entwicklung >PHP-Tutorial >PHP schneidet Bilder zu und speichert sie in MySQL

PHP schneidet Bilder zu und speichert sie in MySQL

WBOY
WBOYOriginal
2016-08-08 09:30:331149Durchsuche
Wenn Sie PHP zum Verarbeiten von Bildern verwenden, müssen Sie diese häufig zuschneiden. Wie man zugeschnittene Bilder in der MySQL-Datenbank speichert, ist eine interessante Frage. Besorgen Sie sich zunächst die hochgeladene Datei:
$picFile = $_FILES["picFileName"];
$picType = $picFile["type"];  
$picData = file_get_contents($tempFile);  
Wenn Sie die Bildgröße nicht ändern und direkt in MySQL speichern müssen, können Sie sie einfach wie folgt implementieren
$tempFile = $picFile["tmp_name"];  
$picData = base64_encode($picData);  

$query = "INSERT INTO image  
   (imgid, image, imgtype) 
   values( 
       null, 
       '$picData', 
       '$picType' 
    );"; 
$link->query($query);
Aber wenn Sie die Bildgröße ändern und die Bilddaten in Form eines Zeichenstroms erhalten möchten, ist ein kleiner Trick erforderlich:
Schließen Sie zuerst den Zuschnitt des Bildes ab und erhalten Sie das Bildobjekt
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);  
}
Nach diesem Schritt ist newPicTemp der Ressourcentyp Bilddaten. Hier tritt das Problem auf. Beachten Sie den obigen Code. Der von file_get_contents zurückgegebene Typ ist ein String, der auch der Parametertyp von base64_encode ist. So konvertieren Sie eine Ressource in einen String-Typ. Nach dem Studium habe ich herausgefunden, dass PHP über diese Funktion
string ob_get_contents ( void )
verfügt, um den Inhalt des Ausgabepuffers in Form einer Zeichenfolge zurückzugeben.
Die Idee besteht also darin, das Ressourcenbild in den Puffer auszugeben und dann ein Objekt zu verwenden, um seinen Inhalt abzurufen. Der Code lautet wie folgt
ob_start(); //开启输出缓冲区  
imagejpeg($newPicTemp); //这个函数可以显示出图片,同时也是把数据输出  
$imgContent = ob_get_contents(); //获取字符流  
ob_end_clean();  //关闭并清除缓冲区  

$picData = base64_encode($imgContent); //不要忘记转码
Auf diese Weise erhalten Sie nach der Größenänderung den Bildzeichenstrom, der in MySQL gespeichert werden kann
Zerstören Sie schließlich die temporären Daten
imagedestroy($src);  
imagedestroy($newPicTemp);
Wenn Sie es lesen müssen Und um das Bild anzuzeigen, können Sie den folgenden Code verwenden
$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;  
Es ist ersichtlich, dass mehrere Schlüsselfunktionen das ob-Logo enthalten. ob ist der Ausgabepuffer, ein sehr wichtiges und nützliches Werkzeug in PHP Siehe php.net

Das Obige stellt PHP vor, um Bilder zuzuschneiden und in MySQL zu speichern, einschließlich des relevanten Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn