Home  >  Article  >  Backend Development  >  PHP crop pictures and store them in mysql

PHP crop pictures and store them in mysql

WBOY
WBOYOriginal
2016-08-08 09:30:331090browse
When using PHP to process images, you often need to crop them. How to store cropped pictures into the mysql database is an interesting question. First, get the uploaded file:
$picFile = $_FILES["picFileName"];
$picType = $picFile["type"];  
$picData = file_get_contents($tempFile);  
If you don’t need to change the image size and store it directly in mysql, you can simply implement it as follows
$tempFile = $picFile["tmp_name"];  
$picData = base64_encode($picData);  

$query = "INSERT INTO image  
   (imgid, image, imgtype) 
   values( 
       null, 
       '$picData', 
       '$picType' 
    );"; 
$link->query($query);
But if you want to change the image size and get the image data in the form of a character stream, you need a little Tips:
First complete the cropping of the image and obtain the image object
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);  
}
After this step, newPicTemp is the resource type image data. Here comes the problem. Observe the code above. The type returned by file_get_contents is string, which is also the parameter type of base64_encode. How to convert resource to string type. After studying, I found that PHP has this function
string ob_get_contents ( void )
which returns the contents of the output buffer in the form of a string.
So, the idea is to output the resource image to the buffer, and then use an object to obtain its content. The code is as follows
ob_start(); //开启输出缓冲区  
imagejpeg($newPicTemp); //这个函数可以显示出图片,同时也是把数据输出  
$imgContent = ob_get_contents(); //获取字符流  
ob_end_clean();  //关闭并清除缓冲区  

$picData = base64_encode($imgContent); //不要忘记转码
In this way, you will get the image character stream after the size is changed, which can be stored in mysql
Finally destroy the temporary data
imagedestroy($src);  
imagedestroy($newPicTemp);
If you need to read and display the image, you can use the following code
$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;  
As you can see Several key functions contain the ob identifier. ob is output buffer, which is a very critical and useful tool in PHPRefer to php.net

The above introduces PHP to crop pictures and store them in mysql, including the relevant aspects. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn