>  기사  >  백엔드 개발  >  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는 리소스 유형 image data가 됩니다. 여기서 문제가 발생합니다. 위의 코드를 관찰하면 file_get_contents에서 반환된 유형은 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 참조

위 내용은 관련 측면을 포함하여 사진을 자르고 mysql에 저장하는 PHP에 대한 소개입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.