上传时调整图片大小

3

我在思考接下来该怎么做。如果我想在将图片插入数据库时调整大小.. 我知道最好不要将图片保存在数据库中.. 但是我必须这样做以节省我的小服务器空间.. 目前我使用以下代码来保存图片:

if (isset($_FILES['immagine']) && $_FILES['immagine']['size'] > 0)
{
  $imageName = $_FILES["immagine"]["name"];
  $imageData = file_get_contents($_FILES["immagine"]["tmp_name"]);
  $imageType = $_FILES["immagine"]["type"];
  if(substr($imageType,0,5)=="image")
     {
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

         $stmt = $dbh->prepare("UPDATE `".$_SESSION['id']."`  SET immagine = ?, type = ?, profilo = 1 WHERE profilo = 1");
         $stmt->bindParam(1,$imageData,PDO::PARAM_LOB);
         $stmt->bindParam(2,$imageType,PDO::PARAM_STR);
         $stmt->execute();
     }
}

可能是在PHP中调整图像大小的重复问题。 - Kevin Brown-Silva
1个回答

1
你应该尝试使用GD。
// Loads the image
$img = imagecreatefromjpeg($_FILES["immagine"]["tmp_name"]); // Assuming it's a jpeg

// Creates a image to put the thumbnail
$tmp_img = imagecreatetruecolor(<thumbnail width>, <thumbnail height>)

// Resizes the image
imagecopyresampled ( $tmp_img, $img, 0, 0, 0, 0, <thumbnail width>, <thumbnail height>, <original width>, <original height>); // The zeroes are the offsets

// Starts output buffer to not let the image reach the browser
ob_start();

// Render the image
imagejpeg($tmp_image); 

// Capture the image data
$imageData = ob_get_clean();  

之后我可以像以前一样保存$imageData变量吗?(谢谢你的回答) - Giuseppe De Paola
1
首先,您需要加载图像。然后创建一个新的图像来放置调整大小的样本。接着进行调整大小操作。最后,您可以将其输出到浏览器,但您可能不希望这样做。因此,您需要启动输出缓冲区并捕获数据以进行存储。 - Rafa Jaques
但是 imagejpeg($tmp_image) 函数会执行什么操作? - Giuseppe De Paola
好的,我会尝试一下。我已经接受了答案,因为我在另一个页面中使用过它,但我不确定如果图片是在浏览器上传时进行调整大小,我是否也可以使用此代码。我过去通常在从数据库获取数据时使用该代码。 - Giuseppe De Paola
是的,它可以工作...但我不知道如何将评论标记为正确答案。 - Giuseppe De Paola
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接