...
✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Завантажте та стисніть кілька зображень у PHP

20

Нещодавно один з наших читачів запитав, як завантажувати та стискати кілька зображень у PHP. Існують певні сценарії, коли нам потрібно дозволити користувачам завантажувати кілька зображень. Завжди є гарною практикою оптимізувати зображення під час завантаження. У цій статті ми вивчаємо завантаження декількох зображень та способи стиснення зображень під час завантаження.

Чому нам потрібно зменшити розмір файлу зображення?

Без сумніву, зображення відіграють важливу роль на вашому веб-сайті. Привертаючі увагу привертають увагу читачів, і вони проводять більше часу на веб-сайті. Але в той же час великі зображення уповільнюють роботу вашого веб-сайту. Оскільки потрібна більша пропускна здатність, веб-сайту потрібно більше часу для завантаження веб-сторінок. Власники сайтів повинні звернути увагу на зменшення розміру файлу зображення та використовувати для цього найкращий інструмент стиснення зображень.

Я збираюся показати вам 2 способи стиснення зображень – TinyPNG та пакет artisansweb / image-optimizer.

TinyPNG – одна з популярних служб компресора зображень в Інтернеті. Ця послуга дозволяє стискати 500 зображень на місяць безкоштовно через їх API. За понад 500 зображень вам потрібно заплатити.

Якщо вам доведеться оптимізувати більше 500 зображень на місяць і не хочете платити, скористайтеся пакетом "artisansweb / оптимізатор зображень". Цей пакет використовує службу reSmush.it для оптимізації зображення.

Я б порекомендував спробувати обидва рішення, порівняти результат і вибрати той, який підходить саме вам.

Сказавши це, давайте подивимось, як стискати зображення після завантаження.

Початок роботи з TinyPNG

Для початку вам потрібно отримати ключ API від TinyPNG. Клацніть тут, щоб отримати ключ API. Вам просто потрібно ввести своє ім’я та електронну адресу, і ви отримаєте електронний лист для свого ключа.

Завантажте та стисніть кілька зображень у PHP

Отримавши ключ розробника, встановіть бібліотеку PHP, надану TinyPNG. Для встановлення бібліотеки у вас повинен бути встановлений Composer. Відкрийте термінал у кореневому каталозі проекту та запустіть команду:

composer require tinify/tinify

Як стискати зображення за допомогою TinyPNG

Як зазначалося в заголовку цієї статті, ми побачимо, як завантажувати та стискати кілька зображень. Для цього нам потрібно створити HTML-форму, яка має введені файли для перегляду кількох зображень. Створіть index.phpі розмістіть у ньому код нижче.

index.php

<form method="post" enctype="multipart/form-data" action="process_images.php">
    <p>
        <label>Upload Images</label>
        <input type="file" name="images[]" accept="image/*" multiple>
    </p>
    <button type="submit" name="submit">Submit</button>
</form>

Вхідному файлу я дав назву у вигляді зображень []. Це тому, що на стороні сервера нам потрібен масив файлів, оскільки користувач збирається переглядати кілька зображень.

Після того, як ми переглянемо зображення та натиснемо кнопку «Надіслати», файл буде надіслано дані форми process_images.php. Це файл, де нам потрібно написати код для завантаження та стиснення зображень.

process_images.php

<?php
// Increase PHP execution time
set_time_limit(0);
 
require_once("vendor/autoload.php");
TinifysetKey("YOUR_API_KEY");
 
if (isset($_POST['submit'])) {
    $supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
 
    if (!file_exists(getcwd(). '/uploads')) {
        mkdir(getcwd(). '/uploads', 0777);
    }
  
    foreach($_FILES['images']['name'] as $key=>$val) {
        $file_name = $_FILES['images']['name'][$key];
  
        // get file extension
        $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
  
        // get filename without extension
        $filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
  
        if (in_array($_FILES['images']['type'][$key], $supported_images)) {
            $filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
            move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
  
            // optimize image using TinyPNG
            try {
                $source = TinifyfromFile(getcwd().'/uploads/'.$filename_to_store);
                $source->toFile(getcwd().'/uploads/'.$filename_to_store);
            } catch(Exception $e) {
                echo $e->getMessage();
                exit;
            }
        }
    }
    echo "Files uploaded successfully.";
}

Не забудьте замінити заповнювач фактичним ключем API. У наведеному вище коді ми генеруємо унікальну назву файлу, додаючи до нього час. Після завантаження зображення на сервер ми надсилаємо зображення в TinyPNG API для оптимізації. Натомість ми отримуємо стиснуту версію зображення, яку ми зберігаємо там же і з тим самим іменем файлу.

Стискайте зображення за допомогою пакету artisansweb / оптимізатора зображень

Я розробив пакет Image Optimizer. Цей пакет використовує службу reSmush.it під капотом для оптимізації зображень. Якщо ви шукаєте безкоштовну послугу, спробуйте цей пакет. На сьогоднішній день reSmush.it оптимізував мільярди зображень. Цей пакет не вимагає надання ключа або реєстрації. Просто підключіть його, і все готово.

Щоб розпочати роботу з пакетом Image Optimizer, встановіть його за допомогою команди:

composer require artisansweb/image-optimizer

Далі код у process_image.phpфайлі буде змінено наступним чином.

<?php
// Increase PHP execution time
set_time_limit(0);
 
require_once("vendor/autoload.php");
 
use ArtisansWebOptimizer;
 
if (isset($_POST['submit'])) {
    $supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
 
    if (!file_exists(getcwd(). '/uploads')) {
        mkdir(getcwd(). '/uploads', 0777);
    }
  
    foreach($_FILES['images']['name'] as $key=>$val) {
        $file_name = $_FILES['images']['name'][$key];
  
        // get file extension
        $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
  
        // get filename without extension
        $filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
  
        if (in_array($_FILES['images']['type'][$key], $supported_images)) {
            $filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
            move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
  
            // optimize image
            try {
                $img = new Optimizer();
                $source = getcwd().'/uploads/'.$filename_to_store;
                $img->optimize($source);
 
            } catch(Exception $e) {
                echo $e->getMessage();
                exit;
            }
        }
    }
    echo "Files uploaded successfully.";
}

Сподіваюся, ви розумієте, як завантажувати та стискати кілька зображень у PHP. Я хотів би почути ваші думки та пропозиції у розділі коментарів нижче.

Пов’язані статті

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі