【发布时间】:2018-03-31 11:43:02
【问题描述】:
目前有一个简单的功能,但它允许用户添加大图像。我想允许所有图片上传,但是应该有一个功能可以调整图片的大小,直到满足特定的文件大小(例如小于 200kb)
if($_FILES['file']['size'] != 0){
$uploadOk = 0;
//image object
$image = $_FILES['file'];
//create unique name for file
$imageRandomName = substr(md5(time()), 0, 5) . "-" . $image['name'];
//upload dir
$target_dir = "rest/user" . $_SESSION["username"] . "/events/" . $_SESSION["event_id"] . "/people/";
//make folder for user if non exists
if(!file_exists($target_dir)){
mkdir($target_dir, 0777, true);
}
//file to be upload
$target_file = $target_dir . base($imageRandomName);
//get file type
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
$check = getimagesize($image["tmp_name"]);
if($check !== false){
$uploadOk = 1;
} else {
$uploadOk = 0;
}
if($uploadOk == 0){
echo "noupload";
} else {
if ( move_uploaded_file($image["tmp_name"], $target_file ) ) {
//get file size on server
$filesizeonserver = filesize($target_file);
echo "file: ".$target_file." size: ".$filesizeonserver;
$times = 0;
if($filesizeonserver > 100000){
do{
$resized = resizeImage($target_file, "0.1");
$filesizeonserver = filesize($target_file);
$times++;
} while ($filesizeonserver > 100000);
echo "resized ".$times." times";
} else {
}
//mysql query
} else {
echo "Sorry, there was an error uploading your file.";
}
}
} else {
//do mysql query
}
resizeImage()
function resizeImage($file, $percent){
list($width, $height) = getimagesize($file);
$newwidth = $width-($width*$percent);
$newheight = $height-($height*$percent);
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($file);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
$newImage = imagejpeg($thumb, $file, 100);
return $newImage;
}
现在我已经到了某个地方,我想我真的很接近实现它,但出于某种奇怪的原因,我得到的图像尺寸为 1px 宽、4px 高和 4kb 大小。全黑图像。
如果您正在考虑将什么图像添加到此功能: 1,232,055 字节,1220 × 1829,72dpi,JPEG
编辑:好的,现在我认为 resizeImage 函数有问题。因为它只在第一次时才起作用。由于某种原因,它无法获取图像并将其呈现为黑色和微小的。
EDIT2:现在我正在获得图像大小调整功能,它没有任何问题。我注意到该功能会不断调整图像的大小,直到苦尽甘来。我可以在查找它的收缩方式中看到它。
EDIT3:我找到了问题所在。现在看来 $filesizeonserver 总是得到第一个值并且在做......虽然它没有更新,即使你将它设置为更改。
【问题讨论】:
-
您想限制上传的文件大小吗?您可以简单地检查 $_FILES['file']['size']
-
您显示的代码 sn-p 字面意思以开头,检查上传文件的大小是否不为 0 ...您想不出那里有什么?
-
当您显然不明白这一点时,立即对问题进行评分是非常不合理的。我需要的是可以调整图像大小的功能,但我不知道如何继续。
-
我有一个sn-p可以帮助你:github.com/kaduev13/image-tools
-
所以你需要调整图片大小。你试过什么?你是 GD 还是 ImageMagick?您的代码和问题描述中的文件大小和图像大小(即宽度 x 高度)之间存在混淆。你想做什么?限制文件大小或图像大小?你为什么告诉我们你需要调整宽度 x 高度,然后同时讨论文件大小?请澄清问题。您在 cmets 中所说的内容!== 您在问题本身中解释的内容。
标签: php image image-processing