在上传之前调整图像文件的大小;我们可以覆盖临时文件并上传吗?

Posted

技术标签:

【中文标题】在上传之前调整图像文件的大小;我们可以覆盖临时文件并上传吗?【英文标题】:Resize the image-file before uploading; Could we overwrite the temp file & upload? 【发布时间】:2015-08-16 10:54:14 【问题描述】:

我希望在上传之前调整图像文件的大小。我的想法是,调整“临时”文件的大小并上传。但是代码给出了错误。下面我附上了我的代码和 cmets。

<input type="file" name="file" id="file" required />  <!-- html Front-end through which the file would be uploaded-->

php 代码开始...

$fileName = $_FILES['file']['tmp_name']; //get the uploaded file's name
$ext = strtolower(substr(strrchr(fileName, '.'), 1)); //get the file's extension
$tempFile = $_FILES['file']['tmp_name'];  //temporary file's path
$identityNumber="20150816";               //assigns an identity number and...
$targetPath = "uploads/".$identityNumber.'.'.$ext;  //rename file & upload it

$image_properties = getimagesize($tempFile);
$image_width = $image_properties[0];
$image_height = $image_properties[1];
$percent = 0.5; //Percentage by which the image is going to be resized

$newWidth = $image_width * $percent;
$newHeight = $image_height * $percent;

if ($ext == "jpeg" || $ext == "jpg") 
    header('Content-type: image/jpeg');
    $thumb = imagecreatefromjpeg($tempFile);
 elseif ($ext == "png") 
    header('Content-type: image/png');
    $thumb = imagecreatefrompng($tempFile);


$modifiedFile = imagecreatetruecolor($new_width, $new_height);

imagecopyresampled(
    $modifiedFile,
    $thumb, 
    0, 
    0,
    0, 
    0,
    $new_width, 
    $new_height, 
    $width,
    $height
);

这是给出警告的代码,如下所述... move_uploaded_file($modifiedFile,$targetPath);

警告:move_uploaded_file() 期望参数 1 是字符串,资源在...中给出。

而“回声是”

资源 ID #10

为什么函数 move_uploaded_file 会发出警告..?任何人都可以帮助实现它吗?

我知道有几种方法可以调整图像的大小,例如“GD”、“ImageMajick”等。但我只喜欢上面的代码......

【问题讨论】:

【参考方案1】:

您可以使用imagepng 函数保存文件,该函数与move_uploaded_file 不同,接受资源参数。 imagejpeg函数也存在。

imagepng ($modifiedFile, $targetPath);

【讨论】:

【参考方案2】:

http://us3.php.net/manual/en/function.imagejpeg.php

move_uploaded_file() 文件用于将上传的文件从临时文件夹移动到目标文件夹。它像复制一样工作。所以它期望两个参数都是字符串。

在您的情况下,您将创建一个全新的图像文件,因此您需要使用 imageXXX() 函数将图像写入磁盘。对于 jpeg 图像,您调用 imagejpeg() 对于 png,您使用 imagepng() 等。

【讨论】:

以上是关于在上传之前调整图像文件的大小;我们可以覆盖临时文件并上传吗?的主要内容,如果未能解决你的问题,请参考以下文章

在使用 PHP 上传到临时目录之前检查图像的文件大小

可以在上传之前在 html 表单上调整图像(客户端)的大小吗?

如何使用ImageField模型调整使用Django上传的图像文件的大小? [关闭]

jQuery文件上传调整大小上传的图像

Coldfusion调整大小使图像文件更大?

使用ng2-file-upload上传前调整图像大小