✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Ladda upp och komprimera flera bilder i PHP

21

Nyligen frågade en av våra läsare hur man laddar upp och komprimerar flera bilder i PHP. Det finns vissa scenarier där vi måste tillåta användare att ladda upp flera bilder. Det är alltid en bra praxis att optimera bilderna vid uppladdningstillfället. I den här artikeln studerar vi uppladdning av flera bilder och hur man komprimerar bilder under uppladdningsprocessen.

Varför behöver vi minska bildens filstorlek?

Utan tvekan spelar bilder en viktig roll på din webbplats. Iögonfallande bilder lockar läsarnas uppmärksamhet och de skulle spendera mer tid på webbplatsen. Men samtidigt gör bilder i stora storlekar långsammare på din webbplats. Eftersom det tar mer bandbredd tar din webbplats längre tid att ladda webbsidorna. Webbplatsägarna måste vara uppmärksamma på att minska bildfilens storlek och använda det bästa bildkomprimeringsverktyget för det.

Jag kommer att visa dig två sätt att komprimera bilder – TinyPNG och artisansweb / image-optimizer- paketet.

TinyPNG är en av de populäraste bildkompressortjänsterna på webben. Med den här tjänsten kan du komprimera 500 bilder per månad gratis via deras API: er. För mer än 500 bilder måste du betala dem.

Om du måste optimera mer än 500 bilder per månad och inte vill betala, använd sedan paketet ‘artisansweb / image-optimizer’. Detta paket använder tjänsten reSmush.it för bildoptimering.

Jag rekommenderar att du testar båda lösningarna, jämför produktionen och väljer den som passar dig.

Med detta sagt, låt oss ta en titt på hur man komprimerar bilder efter uppladdning.

Komma igång med TinyPNG

För att komma igång måste du skaffa en API-nyckel från TinyPNG. Klicka här för att hämta din API-nyckel. Du behöver bara ange ditt namn och din e-postadress så får du e-postadressen för din nyckel.

Ladda upp och komprimera flera bilder i PHP

När du har fått din utvecklarnyckel installerar du ett PHP-bibliotek som tillhandahålls av TinyPNG. Du bör ha Composer installerat på systemet för att installera biblioteket. Öppna terminalen i din projektkatalog och kör kommandot:

composer require tinify/tinify

Hur komprimerar du bilder med TinyPNG

Som nämnts i titeln på den här artikeln ska vi se hur man laddar upp och komprimerar flera bilder. För detta måste vi skapa ett HTML-formulär som har filinmatning för att bläddra i flera bilder. Skapa index.phpoch placera koden nedan i den.

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>

Till filinmatningen gav jag ett namn som bilder []. Det beror på att vi på serversidan behöver en rad filer eftersom användaren kommer att bläddra i flera bilder.

När vi har bläddrat i bilderna och tryckt på knappen Skicka skickas formulärdata till filen process_images.php. Det här är filen där vi behöver skriva en kod för att ladda upp och komprimera bilder.

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.";
}

Se till att ersätta platshållaren med din faktiska API-nyckel. I koden ovan genererar vi ett unikt filnamn genom att lägga tid på det. När en bild har laddats upp till servern skickar vi bilden till TinyPNG API för optimering. I gengäld får vi den komprimerade versionen av bilden som vi lagrar på samma plats och med samma filnamn.

Komprimera bilder med artisansweb / image-optimizer Package

Jag har utvecklat Image Optimizer- paketet. Detta paket använder tjänsten reSmush.it under huven för att optimera bilder. Om du letar efter gratis service kan du prova det här paketet. ReSmush.it har hittills optimerat miljarder bilder. Detta paket kräver ingen nyckel eller registrering. Anslut bara det så är du klar.

För att komma igång med Image Optimizer-paketet, installera det med kommandot:

composer require artisansweb/image-optimizer

Därefter ändras koden i process_image.phpföljande.

<?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.";
}

Jag hoppas att du förstår hur du laddar upp och komprimerar flera bilder i PHP. Jag skulle vilja höra dina tankar och förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer