Как сжать размер изображения без потери качества в PHP

PHP предоставляет возможность сжимать изображения без потери качества. Более того, мы можем изменять размер изображений в PHP для создания эскизов и облегченных веб-изображений.

PHP предоставляет некоторые функции по умолчанию для сжатия изображений и изменения их размера. Многие популярные фреймворки и CMS на основе Core-PHP используют функцию по умолчанию для создания эскизов и изображений без потери качества изображения.

Сжатие изображений в PHP

Здесь мы узнаем, как сжать изображение в PHP без потери его качества всего за 2 простых шага.

ШАГ 1: Создайте HTML-форму

Сначала мы должны создать простую HTML-форму для загрузки файла изображения.

<!DOCTYPE html>
<html>

<head>
    <title>How to compress an image without losing quality in PHP</title>
</head>

<body>
    <form action='' method='POST' enctype='multipart/form-data'>
        <input name="image_file" type="file" accept="image/*">
        <button type="submit">SUBMIT</button>
    </form>
</body>

</html>

enctype=”multipart/form-data” Примечание: является обязательным для предварительной загрузки изображения методом post в форму.

ШАГ 2: Добавьте приведенный ниже PHP-код в начало PHP-файла

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    $file_name = $_FILES["image_file"]["name"];
    $file_type = $_FILES["image_file"]["type"];
    $temp_name = $_FILES["image_file"]["tmp_name"];
    $file_size = $_FILES["image_file"]["size"];
    $error = $_FILES["image_file"]["error"];
    if (!$temp_name)
    {
        echo "ERROR: Please browse for file before uploading";
        exit();
    }
    function compress_image($source_url, $destination_url, $quality)
    {
        $info = getimagesize($source_url);
        if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url);
        elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url);
        elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url);
        imagejpeg($image, $destination_url, $quality);
        echo "Image uploaded successfully.";
    }
    if ($error > 0)
    {
        echo $error;
    }
    else if (($file_type == "image/gif") || ($file_type == "image/jpeg") || ($file_type == "image/png") || ($file_type == "image/pjpeg"))
    {
        $filename = compress_image($temp_name, "uploads/" . $file_name, 80);
    }
    else
    {
        echo "Uploaded image should be jpg or gif or png.";
    }
} ?>

Объяснение

Сначала на втором шаге мы проверили метод запроса формы. Для загрузки файлов и изображений метод POST является обязательным.

После этого мы определили некоторые переменные, связанные с загружаемым файлом. Например, Имя файлаТип файла, Размер файла, Временное местоположение загруженного файла и Ошибка в процессе загрузки файла, если таковая имеется.

Затем мы создали функцию compress_image() для загрузки и сжатия изображения. В этой функции мы передали три переменные загружаемого файла.

  1. $source_url: Это временное местоположение в нашем случае загрузки файла.
  2. $destination_url: Это путь назначения, по которому мы хотим загрузить наше изображение.
  3. $quality: Это показатель качества изображения, который мы хотим поддерживать от 1 до 100. Если мы хотим сохранить качество на 100%, мы можем просто применить 100 или мы можем пропустить 80, если мы хотим сжать и потерять качество изображения на 20%.

В функции compress_image() мы сначала определили спецификации изображения с помощью функции getimagesize() и проверили ее mime-тип.

Из mime-типа мы проверили, является изображение допустимым или нет, и создали соответствующую копию изображения в PHP в соответствии с jpeg, png, gif, используя imagecreatefromjpeg()imagecreatefrompng()imagecreatefromgif() соответственно и сохранили это в переменной $image.

Наконец, мы создали изображение в формате jpeg с помощью переменной $image, используя функцию imagejpeg().

функция imagejpeg() — это, по сути, функция создания изображения из необработанных данных изображения. В функции imagejpeg() мы передали три аргумента.

  1. $image: Необработанные данные изображения, которые мы создали и сохранили в переменной $image
  2. $destination_url: путь к папке назначения / каталогу, в котором мы хотим создать новое изображение
  3. $quality: уровень качества изображения, который мы хотим поддерживать

В конце концов, мы проверили, нет ли ошибки в процессе загрузки, и использовали нашу функцию compress_image() для обработки сжатия загруженного изображения.

Примечание: Измените каталог назначения в соответствии с вашей конфигурацией. Здесь мы установили путь назначения на uploads / в нашем рабочем каталоге.

Заключение

В приведенной выше статье мы ознакомились с полным процессом загрузки и сжатия изображений с необходимыми проверками.

Счастливого программирования

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *