如何调整图像大小而不将其存储在文件夹

时间:2016-03-28 20:06:11

标签: php image gd image-resizing

所以,我被困在这几个小时。我已经厌倦了谷歌任何解决方案,但没有找到解决方案。所以任何帮助都非常感谢。

我的问题:

我正在使用表单上传多张图片。由于数据在多个服务器上备份,我必须将它们存储在数据库中。 将图像存储在文件夹上不是解决方案。我认为我可以将图像保存到数据库中,但我需要创建所有正在上传的图像的缩略图。所以这是我的问题,我如何从这些tmp文件创建缩略图。我创建使用 imagecreate 它无法正常工作,我无法获取该缩略图的内容并将其保存到数据库中。

这是我用来调整不返回内容的图像的代码。

 function resize_image($file, $w, $h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $r = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = abs(ceil($width-($width*abs($r-$w/$h))));
        } else {
            $height = abs(ceil($height-($height*abs($r-$w/$h))));
        }
        $newwidth = $w;
        $newheight = $h;
    } else {
        if ($w/$h > $r) {
            $newwidth = $h*$r;
            $newheight = $h;
        } else {
            $newheight = $w/$r;
            $newwidth = $w;
        }
    }
    $src = imagecreatefromjpeg($file);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    return $dst;
}

这是我发布表单后使用的代码:现在它只显示上传的所有文件。

 for($i=0;$i< count($_FILES['upload_file']['tmp_name']);$i++)
 {

        $size = getimagesize($_FILES['upload_file']['tmp_name'][$i]);
        $name = $_FILES['upload_file']['name'][$i];
        $type = $size['mime'];          
        $file_size_bits = $size['bits'];
        $file_size_width = $size[0];
        $file_size_height = $size[1];
        $name = $_FILES['upload_file']['name'][$i];
        $image_size = $size[3];
        $uploadedfile = $_FILES['upload_file']['tmp_name'][$i];
        $tmpName  = base64_encode(file_get_contents($_FILES['upload_file']['tmp_name'][$i]));
        $sImage_ = "data:" . $size["mime"] . ";base64," . $tmpName;
        echo '<p>Preview from the data stored on to the database</p><img src="' . $sImage_ . '" alt="Your Image" />';


    }

我需要创建正在上传的文件的缩略图。我如何实现这一目标。

请告知。

感谢您的帮助。

干杯

1 个答案:

答案 0 :(得分:1)

这是你的大问题:

return $dst;

$dst是图像资源,而不是图像数据。

您应该使用imagejpeg()imagepng()来发回图像数据。

由于这些函数将数据流输出到浏览器,我们使用一些输出缓冲区函数来捕获输出的图像数据,而不是将其发送到浏览器。

所以,

return $dst;

替换为:

ob_start();
imagejpeg( $dst, NULL, 100); // or imagepng( $dst, NULL, 0 );
$final_image = ob_get_contents();
ob_end_clean();
return $final_image;