我尝试上传图片,更改图片大小,然后将结果写入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似乎是正确大小的有效图像。我没有做什么?
答案 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);
答案 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
感谢大家的帮助。