如何在MySQL中存储来自内存的图像

时间:2015-04-09 18:40:34

标签: php mysql

我尝试上传图片,更改图片大小,然后将结果写入MySQL数据库。基本代码:

    // load original image
$image = imagecreatefromjpeg($file); // load original image

       // create new image
$newImage = imagecreatetruecolor($newWidth, $newHeight);

    // copy original to new, changing size
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight,$origWidth, $origHeight);

    // save new image in database (in a BLOB field)
mysql_query("UPDATE myTable SET Photo='" . mysql_escape_string($newImage) . "' WHERE keyField=2");

但没有任何东西存储。 $ newImage似乎是正确大小的有效图像。我没有做什么?

3 个答案:

答案 0 :(得分:1)

作为@Wayne said。我建议将文件保存在文件系统中并保存数据库中的文件路径 这是将图像复制到文件系统的代码

 $imagepath="C:/your/file/complete/path";
 if(isset($_FILES["file"])){
    move_uploaded_file($_FILES["file"]["tmp_name"], $imagepath);
    mysql_query("UPDATE myTable SET photo_path='" .$imagepath. "' WHERE keyField=2");
 }

编辑:如果您确实需要保存在数据库中,请检查this详细说明

答案 1 :(得分:0)

如果您确实要将图像存储在数据库中,请尝试使用此代替最后一行:

mysql_query("UPDATE myTable SET Photo='" . mysql_escape_string(imagejpeg($newImage)) . "' WHERE keyField=2");

imagedestroy($newImage);

我没有尝试过这个,所以这只是一个建议。


关于您的评论的简短修改:

尝试将输出存储在缓冲区中并将其用作变量,如下所示:

ob_start();
imagejpeg($newImage)
$bufferImage = ob_get_clean();

mysql_query("UPDATE myTable SET Photo='" . mysql_escape_string($bufferImage) . "' WHERE keyField=2");

imagedestroy($newImage);

参考:capture PHP output into a variable

答案 2 :(得分:0)

好的,我找到了答案。基本问题是没有PHP图像函数输出到字符串。但是,这可以通过操纵缓冲来规避:

ob_start();      // start buffering              
imagejpeg($newImage);   // write image to buffer
$imageString = ob_get_contents();   // retrieve buffer as string
ob_end_clean();     // clean up and close buffer
mysql_query("UPDATE myTable SET Photo='" . mysql_escape_string($imageString) . "' WHERE keyField=2");  // this now works

感谢大家的帮助。