PHP Compress Изображение и переименование - PullRequest
0 голосов
/ 13 декабря 2018

Я нашел , что код здесь

    <?php
if(isset($_POST['upload'])){

  // Getting file name
  $filename = $_FILES['imagefile']['name'];

  // Valid extension
  $valid_ext = array('png','jpeg','jpg');

  // Location
  $location = "images/".$filename;

  // file extension
  $file_extension = pathinfo($location, PATHINFO_EXTENSION);
  $file_extension = strtolower($file_extension);

  // Check extension
  if(in_array($file_extension,$valid_ext)){

    // Compress Image
    compressImage($_FILES['imagefile']['tmp_name'],$location,60);

  }else{
    echo "Invalid file type.";
  }
}

// Compress image
function compressImage($source, $destination, $quality) {

  $info = getimagesize($source);

  if ($info['mime'] == 'image/jpeg') 
    $image = imagecreatefromjpeg($source);

  elseif ($info['mime'] == 'image/gif') 
    $image = imagecreatefromgif($source);

  elseif ($info['mime'] == 'image/png') 
    $image = imagecreatefrompng($source);

  imagejpeg($image, $destination, $quality);

}

?>

Это прекрасно работает, но я не могу понять, как переименовать файл изображения при сохранении.Я знаю, как переименовать его с помощью move_uploaded_file () , но не работает с функцией compress_image.

Я пытался добавлять / изменять переменные, но не работал, я получаюсохранить изображение с оригинальным именем на нем.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я нашел решение своей проблемы, если кто-то придет сюда с тем же вопросом для вас:

index.php

    <!doctype html>
<html>
    <head>
        <title>How to Compress Image and Rename while Uploading with PHP</title>
    </head>
    <body>
        <?php
        if(isset($_POST['upload'])){

            // Getting file name
            $filename = $_FILES['imagefile']['name'];

            // Valid extension
            $valid_ext = array('png','jpeg','jpg');

            // Location
            $location = "images/".$filename;

            $imageName = "myNewImageName"; // New image name. 

            // file extension
            $file_extension = pathinfo($location, PATHINFO_EXTENSION);
            $file_extension = strtolower($file_extension);

            $path = "../withdrawals_receipt_uploads/".$imageName.'.'.$file_extension;

            // Check extension
            if(in_array($file_extension,$valid_ext)){  

                // Compress Image
                compressImage($_FILES['imagefile']['tmp_name'], $path, 60);

            }else{
                echo "Invalid file type.";
            }
        }

        // Compress image
        function compressImage($source, $destination, $quality) {

            $info = getimagesize($source);

            if ($info['mime'] == 'image/jpeg') 
                $image = imagecreatefromjpeg($source);

            elseif ($info['mime'] == 'image/gif') 
                $image = imagecreatefromgif($source);

            elseif ($info['mime'] == 'image/png') 
                $image = imagecreatefrompng($source);

            imagejpeg($image, $destination, $quality);

        }

        ?>

        <!-- Upload form -->
        <form method='post' action='' enctype='multipart/form-data'>
            <input type='file' name='imagefile' >
            <input type='submit' value='Upload' name='upload'>    
        </form>
    </body>
</html>

Спасибо @ Joseph_J

0 голосов
/ 13 декабря 2018

Если вы используете функцию imagecreatefromstring () , вам не нужно проверять тип MIME.

Фактически imagecreatefromstring() вернет false, если не может создать ресурс, то есть строка не является допустимым изображением.

Таким образом, вы можете использовать его как дополнительный и более надежный тест, чтобы убедиться, что у вас есть действительное изображение.

Я просмотрел ваш код, изменил некоторые вещи и прокомментировал по пути.

if(isset($_POST['upload'])){

  //Getting file name
  $filename = $_FILES['imagefile']['name'];

  //Valid extension
  $valid_ext = array('png','jpeg','jpg');

  //Location
  $path = 'images/'; //<--Just the path to the directory.
  $imageName = 'myNewImageName.jpg'; //<---Rename your image. 

  //File extension
  $file_extension = strtolower(pathinfo($location, PATHINFO_EXTENSION));

  //Check extension
  if(in_array($file_extension, $valid_ext)){

    //Compress Image    
    compressImage($filename, $path, $imageName, 60);

  }else{
    echo "Invalid file type.";
  }
}

//Compress image
function compressImage($file, $path, $imageName, $quality) {

  //Check to see if the directory exist. If not create it with write permissions.
  if(!file_exists($path)){

    mkdir($path, 0777);

  }

  //Check to see if the directory is writable. If not change permissions.
  if(!is_writable($path)){

  chmod($path, 0777);  

  }

  $resource = imagecreatefromstring(file_get_contents($file)); //Creates an image resource and it does not matter what MIME type.
  imagejpeg($resource, $path . $imageName, $quality); //Will save image to new path and filename.
  imagedestroy($resource); //<--Don't forget to free your resources.

  //Change your permissions back to what they need to be.
  chmod($path, 0755);
  chmod($destination, 0644);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...