[英]How to re-size the image to specific dimensions(without compromising the quality of uploaded image) uploaded by user in optimum way using PHP?
我的網站使用的是PHP,jQuery,AJAX,HTML等。 我是PHP的新手。
我在WebApp中使用了一個jQuery圖像滑塊。 用戶為此圖像滑塊上載圖像。 此外,這些上傳的圖像將顯示在此圖像滑塊中。 此功能對我來說很好用。
此圖像滑塊的寬度和高度固定為940像素* 370像素 。 我想允許用戶上傳尺寸大於或等於940像素* 370像素的圖像 。
假設用戶上傳的圖像尺寸為2215像素* 875像素,那么在將其上載到服務器之前(即,在將圖像保存到服務器之前),應將該圖像的尺寸調整為940像素* 370像素 。 僅在將上載的圖像調整為940像素* 370像素的大小后,才應將其保存到服務器。
在重新調整大小的過程中,不得影響圖像質量。 調整大小后的圖像應看起來像用戶上傳的原始圖像。 它在任何意義上都不應收縮或拉伸。
如何通過使用PHP GD和圖像函數以最佳方式實現此功能?
供您參考,我將嘗試使用文件上傳功能的代碼放在下面:
HTML代碼:
<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
PHP代碼:
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
$image_dimesnions = getimagesize($_FILES['file']['tmp_name']);
$image_width = $image_dimesnions[0];
$image_height = $image_dimesnions[1];
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] > 5242880)
&& ($image_width < 940 || $image_height < 370)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";
}
?>
您可以使用imagemagick命令行工具或PHP GD Library在服務器上進行操作。
ImageMagick的更多信息鏈接-
PHP GD庫的信息鏈接-
使用以下命令轉換圖像-
$w = 940;
$h = 370;
$temp_path = $_FILES["file"]["tmp_name"];
$dest_path = "upload/" . $_FILES["file"]["name"];
shell_exec("/usr/bin/convert -resize \"$w"."X".$h.">\" $dest_path $temp_path");
對PHP GD-使用以下代碼
<?php
$uploadPath = "/var/www/stack/26201855/upload/";
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
$imageType = "";
if(strpos($_FILES["file"]["type"],'jpeg') || strpos($_FILES["file"]["type"],'jpg') || strpos($_FILES["file"]["type"],'pjpeg')){
$imageType = "jpeg";
}else if(strpos($_FILES["file"]["type"],'png') || strpos($_FILES["file"]["type"],'x-png')){
$imageType = "png";
}else if(strpos($_FILES["file"]["type"],'gif')){
$imageType = "gif";
}
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists($uploadPath . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
//move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
$images = $_FILES["file"]["tmp_name"];
$new_images = $uploadPath.$_FILES["file"]["name"];
copy($images,$new_images);
$width=940;
$size=GetimageSize($images);
$height=round($width*$size[1]/$size[0]);
if($imageType === 'jpeg'){
$images_orig = imagecreatefromjpeg($images);
}else if($imageType === 'png'){
$images_orig = imagecreatefrompng($images);
}else if($imageType === 'gif'){
$images_orig = imagecreatefromgif($images);
}
$photoX = ImagesX($images_orig);
$photoY = ImagesY($images_orig);
$images_fin = ImageCreateTrueColor($width, $height);
ImageCopyResampled($images_fin, $images_orig, 0, 0, 0, 0, $width+1, $height+1, $photoX, $photoY);
if($imageType === 'jpeg'){
imagejpeg($images_fin,$new_images);
}else if($imageType === 'png'){
imagepng($images_fin,$new_images);
}else if($imageType === 'gif'){
imagegif($images_fin,$new_images);
}
ImageDestroy($images_orig);
ImageDestroy($images_fin);
echo "Stored in: " . $uploadPath. $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";
}
?>
注意:您必須自己決定哪種方便的方法來調整圖像大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.