簡體   English   中英

如何使用PHP以最佳方式將圖像重新調整為用戶上傳的特定尺寸(不影響上傳圖像的質量)?

[英]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的更多信息鏈接-

  1. 關於ImageMagick
  2. 命令行選項
  3. 調整大小

PHP GD庫的信息鏈接-

  1. PHP GD
  2. imagecreatefromjpeg
  3. imagecreatefrompng
  4. imagecreatefromgif

使用以下命令轉換圖像-

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM