Ladda upp och komprimera flera bilder i PHP
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.
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.php
och 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.php
fö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
- Dra och släpp filöverföring med JavaScript och PHP
- Ändra storlek på bild i PHP med hjälp av interventionsbildbibliotek
- Ladda upp bild med hjälp av Bulletproof Library i PHP