Maak een dynamische fotogalerij met PHP in drie stappen
als je een digitale camera hebt, heb je waarschijnlijk ook een digitale fotogalerij met memorabele momenten. En als je een digitale Fotogalerie hebt, ben je bijna zeker een veel voorkomend probleem tegengekomen: het organiseren van je foto ‘ s zodat ze gemakkelijk kunnen worden doorzocht en geïndexeerd.
nu weet u dit misschien niet,maar de meeste digitale camera ‘ s integreren automatisch beschrijvende metadata in de headers van de afbeeldingen die ze maken. Deze headers, Exif(EXchangeable Image File) headers genoemd, bevatten informatie over het merk en model van de camera, de tijd en datum waarop de foto is genomen, de technische specificaties van de foto (sluitertijd, diafragma, enzovoort) en een miniatuur van het beeld. Daarnaast kunt u deze automatisch gegenereerde kopteksten aanvullen met eigen beschrijvende tekst – bijvoorbeeld “Sally’ s first footballgame” of “Getting drunk in Malta”.
ik weet zeker dat je kunt zien waar ik heen ga met dit. Met een beetje fantasie en creatief denken, is het mogelijk om de headers gegenereerd door uw camera (en, als je de tijd en motivatie, verder aangevuld door u)te gebruiken om automatisch uw fotocollectie te organiseren en te beschrijven. Dit artikel zal je laten zien hoe, met behulp van PHP ‘ sexif functies.
Stap 1: Zorg ervoor dat je PHP build EXIF
ondersteunt om EXIF headers te kunnen lezen, moet je PHP build ondersteuning voor de EXIFmodule bevatten. U kunt controleren of deze ondersteuning is ingeschakeld, door het creëren van een PHP scriptbevat de code weergegeven in lijst A.
Lijst A
<?php
phpinfo ();
?>
bekijk de uitvoer van dit script in uw webbrowser en bekijk de lijst met uitbreidingen om te zien of EXIF is opgenomen. Als dat zo is, ga dan naar de volgende stap. Zo niet,dan moet je PHP ‘ s EXIF functies activeren, ofwel door de extensie regel in php te verwijderen.ini (Windows) of compileren van uw PHP build met het argument –enable-exif (UNIX). Meer informatie over hoe dit te doen is beschikbaar op de PHP website.
Stap 2: Verplaats uw foto ’s in een enkele map
verzamel vervolgens al uw foto’ s in een enkele map onder de webserver documentroot. Dit is ook een goed moment om uw eigen beschrijvende opmerkingen toe te voegen aan eachimage (hoewel dit niet essentieel is). Een aantal goede shareware en freewaretools zijn beschikbaar om u te helpen dit te doen; neem een kijkje op Exifer Voor Windows of RoboPhoto.
Stap 3: Schrijf code om foto headers en commentaren te lezen
de laatste stap is om de PHP scripts te schrijven die EXIF-gegevens zullen extraheren uit yourimages en automatisch een webpagina genereren met miniaturen, technische informatie en links naar grotere versies van elke afbeelding. Er zijn twee scriptshere: de eerste, gallery.php, (zie Lijst B) zoekt naar foto ‘ s en haalt EXIF headers uit hen, terwijl de tweede, thumbnail.php, (zie Listing C) is verantwoordelijk voor het extraheren van de miniatuurafbeelding van elke foto.
Listing B-Hier is de code voor galerij.php
<html>
<head></head>
<body>
<table>
<?php
/ / define directory path
$dir = “.”;
// itereren door bestanden
// zoek naar JPEG ‘ s
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) != = onwaar) {
if (preg_match (“/.jpg/”, $file)) {
// read EXIF headers
$exif = exif_read_data($file, 0, true);
echo ” <tr>”;
// miniatuur ophalen
/ / link naar volledige afbeelding
echo ” <td valign = top><a href = $dir / $file><imgsrc=miniatuur.php?file = $file>< / a><td>”;
echo ” <td valign = top><lettergrootte=-1>”;
// bestandsnaam
echo “bestand: <b>” ophalen . $ exif . “< / b>< br/>”;
// timestamp
echo “Timestamp:” ophalen . $ exif . “<br/>”;
// afbeeldingsafmetingen
echo “Dimensions:” ophalen . $ exif . “x”. $ exif . “<br/>”;
// merk en model van de camera
echo “Camera:” ophalen . $ exif;
echo ” < / font>< / td>”;
echo ” < / tr>”;
}
}
closedir ($dh);
}
}
?>
</tabel>
</lichaam>
</html>
Thisscript gebruikt PHP ‘ s directory functies om een lijst van alle JPEG-afbeeldingen in de directory op te halen, en gebruikt dan de exif_read_data() functie om de EXIF headers van elke afbeelding als anarray te lezen. Elke afbeelding wordt weergegeven als een thumbnail met behulp van informatie die door thumbnail.php, en eachthumbnail is zelf hyperlinks naar zijn bovenliggende afbeelding. Relevante informatie-beeldnaam, afmetingen, tijdstempel en cameramodel—wordt uit deze Headers geëxtraheerd en bij elke miniatuur weergegeven.
Als u een Exif-editor hebt gebruikt om uw eigen opmerkingen aan de afbeeldingen toe te voegen, kunt u toegang krijgen tot de juiste array-elementen om die informatie ook op te halen en weer te geven. Kijk in de $ exif array met print_r ($exif) om het array pad voor uw aangepaste metadata te vinden.
Opmerking: Verschillende camerafabrikanten gebruiken de EXIF-headers op verschillende manieren. Als de uitvoer van het bovenstaande script enige informatie lijkt te missen, zou je in de $exif array moeten kijken met print_r($exif) om erachter te komen hoe je camera de EXIF data schrijft, en de juiste aanpassingen maken aan de array toetsen in het bovenstaande script (ListingB).
Listing C – en hier is de code voor miniatuur.php
<?php
/ / define directory path
$dir = “.”;
$image = exif_thumbnail ($dir . “/” . $_GET);
header (“Content-Type: image / jpeg”);
echo $image;
?>
Ditscript is zeer eenvoudig—het haalt de naam van het afbeeldingsbestand van de URL en gebruikt de functie exif_thumbnail() om een miniatuur uit de benoemde afbeelding te halen. Deze thumbnail wordt vervolgens naar de browser gestuurd, samen met een passende header, voor weergave.
Plaats beide scripts in de map met uw foto ‘ s en gebruik vervolgens uw webbrowser om toegang te krijgen tot de galerij.php. U moet miniaturen van de afbeeldingen in de directory te zien, samen met beschrijvende informatie over elk.Als u op een miniatuur klikt, komt u bij de grotere bovenliggende afbeelding.
figuur A is een voorbeeld van hoe de output eruit zou kunnen zien:
figuur A
een voorbeeld schermafdruk
en daar heb je het-een automatisch gegenereerde fotogalerij! Als u nieuwe afbeeldingen naar de map kopieert, worden ze automatisch weergegeven in de galerijlijst.Is dat niet gaaf?
Noot: U kunt de scripts die in Stap 3 zijn gemaakt in een andere map plaatsen dan die met uw foto ‘ s, zolang u zich maar onthoudt om de $dirvariable bovenaan elk script bij te werken met het juiste pad naar de fotocollectie.