使用imagejpeg将图像写入数据库

时间:2012-09-14 13:11:46

标签: php image gd

基本上我要做的就是将图像写入数据库。

据我所知,imagejpeg函数 - 如果未设置“string $ filename”或NULL,则输出应为普通图像数据。 但事实并非如此,唯一的输出是“1”(真)......

如何在不先将图像存储到文件系统并重新加载的情况下获取图像数据?

这是我的代码示例:

// If it is the right filetype.
if ($_FILES[$dom_element]['type'] == 'image/jpeg' || $_FILES[$dom_element]['type'] == 'image/pjpeg') {

    // Create the image recource.
    $image_image = imagecreatefromjpeg($_FILES[$dom_element]['tmp_name']);
}

// Resize the image.
imagecopyresampled($image_image_p, $image_image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_width, $image_height);

// Write the image in the database (does not work this way -> output = "1")
mysql_select_db("$db_announcement");
$sql = "UPDATE announcement
SET announcement_guest_image_data = '" . addslashes(imagejpeg($image_image_p, NULL, $settings_image_quality)) . "',
announcement_guest_image_exists = 'yes'
WHERE announcement_timestamp = '$timestamp' AND announcement_guest_mail = '$global_mail'";
$sql = mysql_query($sql);

// Delete the image recources.
imagedestroy($image_image);
imagedestroy($image_image_p);

2 个答案:

答案 0 :(得分:1)

文档说明了$filename参数:

  

如果未设置或为NULL,原始图像流将 直接输出

关于返回值

  

成功时返回TRUE,失败时返回FALSE。

该功能将图像输出到标准输出。它不是 return 它。

您可以从标准输出中捕获它,如下所示:

ob_start();
imagejpeg(...);
$imageData = ob_get_clean();

答案 1 :(得分:0)

我强烈建议您避免存储二进制数据,例如数据库中的图像。您只需在表上记录所有内容,包括图像名称,创建日期等,然后将该文件放在文件系统上。

我知道这不是您正在寻找的答案,但我认为这可能会有所帮助。