PHP crop pictures and store them in mysql

WBOY
Release: 2016-08-08 09:30:33
Original
1089 people have browsed it
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);  
Copy after login
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);
Copy after login
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);  
}
Copy after login
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 )
Copy after login
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); //不要忘记转码
Copy after login
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);
Copy after login
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;  
Copy after login
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.

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!