Lataa ja pakkaa useita kuvia PHP: ssä
Äskettäin yksi lukijoistamme kysyi kuinka ladata ja pakata useita kuvia PHP: ssä. Joissakin tilanteissa meidän on sallittava käyttäjien ladata useita kuvia. On aina hyvä tapa optimoida kuvat lataushetkellä. Tässä artikkelissa tutkitaan useiden kuvien lataamista ja kuinka pakata kuvia latausprosessin aikana.
Miksi meidän on pienennettävä kuvatiedoston kokoa?
Kuvilla on epäilemättä tärkeä rooli verkkosivustollasi. Katseenvangitsevat kuvat herättävät lukijoiden huomion ja he viettävät enemmän aikaa verkkosivustolla. Mutta samaan aikaan suurikokoiset kuvat hidastavat verkkosivustoasi. Koska se vie enemmän kaistanleveyttä, verkkosivujen lataaminen vie pidemmän ajan. Sivuston omistajien on kiinnitettävä huomiota kuvatiedoston koon pienentämiseen ja käytettävä siihen parasta kuvanpakkaustyökalua.
Näytän sinulle kaksi tapaa pakata kuvia – TinyPNG ja artisansweb / image-optimizer -paketti.
TinyPNG on yksi suosituimmista kuvakompressoripalveluista verkossa. Tämän palvelun avulla voidaan pakata 500 kuvaa kuukaudessa ilmaiseksi niiden sovellusliittymien kautta. Yli 500 kuvasta sinun on maksettava ne.
Jos joudut optimoimaan yli 500 kuvaa kuukaudessa etkä halua maksaa, käytä sitten artisansweb / image-optimizer -pakettia. Tämä paketti käyttää reSmush.it- palvelua kuvan optimointiin.
Suosittelen kokeilemaan molempia ratkaisuja, vertaamaan tuotosta ja valitsemaan sinulle sopivan.
Tämän sanottuaan katsotaanpa, miten kuvia pakataan lataamisen jälkeen.
TinyPNG: n käytön aloittaminen
Aloittamiseksi sinun on hankittava TinyPNG: ltä API-avain. Napsauta tätä saadaksesi API-avaimesi. Sinun tarvitsee vain kirjoittaa nimesi ja sähköpostiosoitteesi, niin saat avaimesi sähköpostin.
Kun olet saanut kehittäjäavaimen, asenna TinyPNG: n tarjoama PHP-kirjasto. Sinun pitäisi olla Säveltäjä asennettuna järjestelmään asentaa kirjastoon. Avaa pääte projektin juurihakemistossa ja suorita komento:
composer require tinify/tinify
Kuinka pakata kuvia TinyPNG: n avulla
Kuten tämän artikkelin otsikossa mainitaan, aiomme nähdä kuinka ladata ja pakata useita kuvia. Tätä varten meidän on luotava HTML-lomake, jolla on tiedostosyöttö useiden kuvien selaamiseen. Luo index.php
ja aseta koodi sen alle.
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>
Annoin tiedoston syötteelle nimen kuvina []. Tämä johtuu siitä, että palvelinpuolella tarvitsemme joukon tiedostoja, koska käyttäjä selaa useita kuvia.
Kun olemme selanneet kuvia ja painaneet Lähetä-painiketta, se lähettää lomaketiedot tiedostoon process_images.php
. Tämä on tiedosto, johon meidän on kirjoitettava koodi kuvien lataamista ja pakkaamista varten.
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.";
}
Muista korvata paikkamerkki todellisella API-avaimella. Yllä olevassa koodissa luomme yksilöllisen tiedostonimen lisäämällä siihen aikaa. Kun kuva on ladattu palvelimelle, lähetämme kuvan TinyPNG-sovellusliittymään optimointia varten. Vastineeksi saamme pakatun version kuvasta, jonka tallennamme samaan paikkaan ja samalla tiedostonimellä.
Pakkaa kuvat käyttämällä artisansweb / image-optimizer -pakettia
Olen kehittänyt Image Optimizer -paketin. Tämä paketti käyttää reSmush.it- palvelua hupun alla kuvien optimoimiseksi. Jos etsit ilmaista palvelua, kokeile tätä pakettia. ReSmush.it on tähän mennessä optimoinut miljardeja kuvia. Tämä paketti ei vaadi avainta tai rekisteröintiä. Liitä vain se ja olet valmis.
Aloita Image Optimizer -paketin asentaminen asentamalla se komennolla:
composer require artisansweb/image-optimizer
Seuraavaksi koodia koodissa process_image.php
muutetaan seuraavasti.
<?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.";
}
Toivon, että ymmärrät kuinka ladata ja pakata useita kuvia PHP: ssä. Haluaisin kuulla ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.