januari 6, 2022

skapa ett dynamiskt fotogalleri med PHP i tre steg

omdu har en digitalkamera har du förmodligen också ett digitalt fotogalleri med minnesvärda stunder. Och om du har ett digitalt fotogalleri är du nästan säker på att du har stött på ett mycket vanligt problem: organiseradina foton så att de enkelt kan sökas och indexeras.

nu kanske du inte vet det här,men de flesta digitalkameror bäddar automatiskt in beskrivande metadata i rubrikerna på bilderna de skapar. Dessa rubriker, som kallas EXchangeable Image File (EXIF) rubriker, innehåller information om kamerans märke och modell, tiden ochdatum fotot togs, de tekniska specifikationerna för fotot (shutterspeed, bländare och så vidare) och en miniatyrbild av bilden. Dessutom tillåter manyimage-redaktörer dig att komplettera dessa automatiskt genererade headers med egen beskrivande text-till exempel” Sallys första fotbollsspel ”eller”bli full i Malta”.

jag är säker på att du kan se vart jag ska med det här. Med lite fantasioch kreativt tänkande är det möjligt att använda rubrikerna som genereras av dinkamera (och om du har tid och motivation, ytterligare kompletterad av dig)för att automatiskt organisera och beskriva din fotosamling. Den här artikeln kommer attvisa hur du använder PHP ’ exif-funktioner.

Steg 1: Se till att din PHP-byggnad stöder EXIF

Inorder för att läsa EXIF-rubriker måste din PHP-byggnad innehålla stöd för Exifmodulen. Du kan kontrollera om detta stöd är aktiverat genom att skapa ett PHP-skript som innehåller koden som visas i lista A.

Lista A

<?php
phpinfo ();
?>

Visautmatningen av det här skriptet i din webbläsare och granska listan över förlängningar för att se om EXIF ingår. Om det är, gå vidare till nästa steg. Om inte, måste du aktivera PHP: s EXIF-funktioner, antingengenom att kommentera förlängningslinjen i php.ini (Windows) ellerkompilera din PHP-byggnad med argumentet –enable-exif (UNIX). Mer information om hur man gör detta finns på PHP-webbplatsen.

steg 2: Flytta dina foton till en enda katalog

samla sedan alla dina foton i en enda katalog under webbservern documentroot. Det här är också en bra tid att lägga till egna beskrivande kommentarer till varjebild (även om detta inte är nödvändigt). Ett antal bra shareware och freewaretools finns tillgängliga för att hjälpa dig att göra detta; ta en titt på Exifer för Windows eller RoboPhoto.

steg 3: Skriv kod för att läsa foto rubriker och kommentarer

Thefinal steget är att skriva PHP-skript som kommer att extrahera EXIF-data från dinbilder och automatiskt generera en webbsida med miniatyrer, technicalinformation och länkar till större versioner av varje bild. Det finns två manushär: den första, galleri.php, (se Lista B) letar efter foton och extraherar EXIF-rubriker från dem, medan den andra, miniatyrbild.php, (se Lista C) ansvarar för att extrahera miniatyrbilden frånvarje foto.

Listing B – Här är koden för galleriet.php

<html>
<head></head>
<body>
<table>
<?php
/ / definiera katalogsökväg
$dir =”.”;
/ / iterera genom filer
/ / leta efter JPEG
om (is_dir ($dir)) {
om ($dh = opendir ($dir)) {
medan (($file = readdir ($dh)) != = false) {
om (preg_match (”/.jpg/”, $file)) {
/ / läs EXIF-rubriker
$ exif = exif_read_data ($file, 0, true);
echo ”<tr>”;
/ / få miniatyr
// länk till fullständig bild
echo ”<td valign=topp><a href=$dir/$fil><imgsrc=miniatyrbild.php?file=$Fil></a><TD>”;
echo ”<td valign=topp><teckenstorlek=-1>”;
// hämta filnamn
echo ” fil: <b>”. $ exif . ”< / b>< br/>”;
// hämta tidsstämpel
echo ” tidsstämpel:”. $ exif . ”<br/>”;
// hämta bilddimensioner
echo ” dimensioner:”. $ exif . ”x”. $ exif . ”<br/>”;
// få kamera märke och modell
echo ” kamera:”. $ exif;
eko ” < / teckensnitt>< / td>”;
eko ” < / tr>”;
}
}
closedir ($dh);
}
}
?>
</tabell>
</kropp>
</html>

Thisscript använder PHP: s katalogfunktioner för att hämta alist av alla JPEG-bilder i katalogen och använder sedan exif_read_data () – funktionen för att läsa EXIF-rubrikerna från varje bild som anarray. Varje bild visas som en miniatyrbild med hjälp av information som tillhandahålls av miniatyrbild.php, och eachthumbnail är själv hyperlänkad till sin överordnade bild. Relevant information-bildnamn, dimensioner, tidsstämpel och kameramodell—extraheras från dessa huvuden och visas med varje miniatyrbild.

om du använde en EXIF-redigerare för att lägga till egna kommentarer till bilderna kan du komma åt lämpliga arrayelement för att hämta och visa den informationen också. Titta inuti $ exif-arrayen med print_r($exif) för att ta reda på arrayvägen för dina anpassade metadata.

Obs:olika kameratillverkare använder EXIF-rubrikerna på olika sätt. Om utmatningen av skriptet ovan verkar sakna viss information, borde dutitta inuti $ exif-arrayen med print_r($exif) för att ta reda påexakt hur din kamera skriver EXIF-data och gör lämpliga justeringartill arraytangenterna i skriptet ovan (ListingB).

lista C – och här är koden för miniatyrbild.php

<?php
/ / definiera katalogsökväg
$dir =”.”;
$ image = exif_thumbnail ($dir . ”/” . $_GET);
rubrik (”innehållstyp: bild/jpeg”);
echo $image;
?>

Thisscript är mycket enkelt – det hämtar bildfilnamnet från webbadressen och uses the exif_thumbnail () funktion toextract en miniatyrbild från den namngivna bilden. Denna miniatyr skickas sedan till webbläsaren, tillsammans med en lämplig rubrik, för visning.

Platsbåde dessa skript i katalogen som innehåller dina foton och använd sedan dinwebbläsare för att komma åt galleriet.php. Du bör se miniatyrbilder avbilderna i katalogen, tillsammans med beskrivande information om var och en.Om du klickar på en miniatyrbild ska du ta dig till den större föräldrabilden.

Figur A är ett exempelskärmbild av hur utmatningen kan se ut:


Figur A

ett exempel skärmdump

och där har du det – ett automatiskt genererat fotogalleri! När du kopierar newimages till mappen visas de automatiskt i gallerilistan.Är det inte snyggt?

notera: Du kanplacera skript som skapats i steg 3i en annan katalog än den som innehåller dina foton, så länge du kommer ihåg att uppdatera $dirvariable högst upp i varje skript med rätt sökväg till fotokollektionen.

Lämna ett svar

Din e-postadress kommer inte publiceras.