04. maj 2008 - 16:13
Der er
8 kommentarer og
1 løsning
Thumbnails af flere billeder via gdlib
Hej alle,
Er der nogen som kan vise mig et script som via gdlib danner en thumbnail ud fra x antal billeder i en mappe på serveren! Thumbnails skal vises i browseren.
Der skal altså vises en thumbnail for hvert billede i den pågældende mappe.
Jeps - det vil jeg gerne - så kan andre også få glæde af det.
Det drejer sig om 2 filer, som jeg smider i hver sin kommentar.
Begge filer skal smides i samme mappe som dine billeder.
Der udover skal du lave en under-mappe, som du kalder "thumbnails". Denne mappe skal du lave CHMOD 777 på.
I filen head.php kan du foretage forskellige ændringer i opsætningen af din thumbnails. Det er bl.a. størrelse, antal stk. på tværs og farver.
Filen fotos.php skal du ikke gøre noget med.
<?php
//DENNE FIL HEDDER head.php
### --- HERFRA SKAL RETTES HVER GANG --- ###
// VIS TITLEN PA SIDEN
$pagetitle='Dokkeldal Lejren - galleri';
//Sti og fil til fotooversigten (bruges på oversigtens tilbage-knap)
//Sti og fil kan også være '../../landslejr2006.html'
$sti='../../index.html';
### --- HERTIL SKAL RETTES HVER GANG --- ###
//Sti til grafikfil på thumbnailoversigten
$grafiksti='../grafik/';
// Thumbnails max størrelse
$maxwidth = 150;
$maxheight = 150;
// Thumbnail-mappens navn
$thumbnail_mappe = "thumbs";
// NUMRE AF <TD> PR. <TR> ( PA DANSK/ENGELSK: COLUMNS PA SIDEN :-) )
$td='4';
// BAGGRUNDSFARVE
$bg='#404d57';
// SKAL NAVNES VISES PÅ BILLEDET
$name='1'; // 1 = yes, 0 = no
//Navnet på denne fil
$filnavn = 'fotos.php';
?>
<?php
//DENNE FIL HEDDER fotos.php
//SLET BLOT DE 4 FØRSTE LINJE, SÅ KODEN STARTER MED <HTML>
?>
<html>
<head>
<style type="text/css">
a {text-decoration:none}
a:link { color: #ffffff; text-decoration: none; }
a:visited { color: #ffffff; text-decoration: none; }
a:active { color: #ffffff; text-decoration: none; }
a:hover { color: #ffffff; text-decoration: none; }
.form {
background-color: #cfcfcf;
border-color: #000000;
color: #000000;
border-bottom: 1px solid;
border-top: 1px solid;
border-left: 1px solid;
border-right: 1px solid;
font-family: Verdana;
font-size: 10px;
cursor: hand;
cursor: pointer;
}
</style>
</head>
<?php
//Denne fil skal lægges i samme mappe som billed-filerne. Når filen indlæses genererer den automatisk thumbnails af alle billedfiler.
//På FDF-serveren må billedfilerne ikke være større end
//Navnet på billed-filen må ikke indeholde mellemrum og skal overholde almindlige regler for filnavne på hjemmesideservere
//Husk at ændre skriverettighederne på den mappe filen her ligger i
// VARIABLERNE DEFINERES I FILEN "HEAD.PHP"
require 'head.php';
### --- PAS PA MED AT RETTET NOGET HERUNDER --- ###
if(!is_dir($thumbnail_mappe)) {mkdir("$thumbnail_mappe", 0777);}
function imageresizejpeg($sourcefile,$maxwidth,$maxheight,$destinationfile) { // funktion til resize eaf jpg-filer
global $newwidth,$newheight;
if($img_src=@imagecreatefromjpeg($sourcefile)) {
copy($sourcefile, $destinationfile);
$info=@getimagesize($sourcefile);
if($info[1]>$maxheight || $info[0]>$maxwidth)
{
$ratio_height=$maxheight/$info[1];
$ratio_width=$maxwidth/$info[0];
$ratio=min($ratio_width,$ratio_height);
$newwidth=intval($info[0]*$ratio);
$newheight=intval($info[1]*$ratio);
$img_dst=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $info[0], $info[1]);
@imagejpeg($img_dst, $destinationfile);
imagedestroy($img_dst);
}
else
{
$newwidth=$info[0];
$newheight=$info[1];
}
@imagedestroy($img_src);
return true;
}
else
{
return false;
}
}
function get_size($info,$maxwidth,$maxheight) { // funktion til beregning af størrelse af ikke-jpg-filer
global $newwidth,$newheight;
if($info[1]>$maxheight || $info[0]>$maxwidth) {
$ratio_height=$maxheight/$info[1];
$ratio_width=$maxwidth/$info[0];
$ratio=min($ratio_width,$ratio_height);
$newwidth=intval($info[0]*$ratio);
$newheight=intval($info[1]*$ratio);
return true;
}
else
{
$newwidth=$info[0];
$newheight=$info[1];
}
}
### --- PAS PA MED AT RETTET NOGET HERUNDER --- ###
$handle=opendir('.');
// GO
$piccy=array();
$count=0;
// SCAN THE DIR
//while (($filename = readdir($handle))!==false) {
while ($filename = readdir($handle)) {
// TYPER FILER DER KAN HENTES
if (eregi("(\.jpg|\.gif|\.bmp|\.png|\.JPG|\.GIF|\.BMP|\.PNG)$", $filename)) { // hvis fil er en billedfil
$piccy[$count] = $filename;
$count++;
}
}
// LUK DIR
closedir($handle);
// SORTERE FILERNE
sort($piccy);
reset($piccy);
// VISER STORT IMAGE
if ($_GET['large']){ // hvis large er med som query-string
$large = $_GET['large'];
echo "<html><head><title>" . $pagetitle ."" . $large . "</title></head><body bgcolor=" . $bg . ">";
echo '<div align="center">';
// HVIS NAVNET ER SAT TIL AT VISES?
if ($name=="1") {
echo '<br><font face="verdana" color="white" size="1">Billednavn: ' . $large . '</font>';
}
// FIND FORRIGE OG NÆSTE
$i = 0;
$prev = "";
while ( ($piccy[$i] != $large) && ($i < sizeof($piccy)) ) {
$prev = $piccy[$i];
$i++;
}
if ($i == sizeof($piccy)-1) {
$next = "";
} else {
$next = $piccy[$i+1];
}
// VIS FORRIGE OG NÆSTE
echo "<br><br>";
//echo "<a href=?large=".$prev.">[< <]</a>";
echo '<button onclick="location.href=\'?large='.$prev .'\';return false;" class="form">[< <]</button>';
echo " ";
//echo "<a href=?large=".$next.">[> >]</a>";
echo '<button onclick="location.href=\'?large='.$next .'\';return false;" class="form">[> >]</button>';
// VIS IMAGE
echo '<table width="100%" border=0 cellpadding=0 cellspacing=0>';
echo '<tr>';
echo '<td valign="middle" align="center">
<table border=15 bordercolor="#333e46" cellpadding=2 cellspacing=0><tr><td bgcolor="black">
<a href=' .$filnavn.'><img src="'.$large.'" alt="'.$large.'" border=0></a>
</td>
</tr>
</table>
</td>';
echo '<br>';
echo '</tr></table>';
echo '<br>';
echo '<center><button onclick="location.href=\''.$filnavn .'\';return false;" class="form">Tilbage til galleri</button>';
// NO PROBLEMO, LAVER TABLER FOR THUMBNAILS:
} else { // hvis large ikke er med som query-string
// START TABLE SAET cellpadding, cellspacing, colors,
echo '<html><head><title>'. $pagetitle .'</title>';
echo '<head>';
echo "<body bgcolor=" . $bg . ">";
echo '<table width="100%" border=0 cellpadding=1 cellspacing=0><tr><td bgcolor="#333e46"><b><font face="verdana" size="5" color="white"><a href="'.$sti .'">' . $pagetitle . '</a></b></font></td><td bgcolor="#333e46" align="right"><a href="'.$sti .'"><img src="' .$grafiksti .'fdf.gif" border=0></a></td></tr></table>';
echo '<br><b><center><font face="verdana" size="1" color="white">Klik på et billede for at vise det i stort format!</b></font></center><br>';
echo '<table width="100%" border=0 cellpadding=3 cellspacing=0>';
echo '<tr>';
// FORDI <TD> DET ER SAT AF BRUGER, LAV THE PERCENTAGES:
$divider=ceil(100/$td);
if (($divider*$td)>100) $divider--;
// HENT IMAGES
for ($l=0;$l<=sizeof($piccy)-1;$l++){
$isend = strpos((($l)/$td),".");
if (!$isend && ($l!=0)){
echo "</tr>\n<tr><td colspan=$td><br></td></tr>\n<tr>\n";
}
if ($l==0){
echo "\n";
}
// START <TD>
echo '<td width="'.$divider.'%" valign="middle" align="center">';
// FA STORT BILLEDE (IF SELECTED)
echo '<table border=8 bordercolor="#333e46" cellpadding=2 cellspacing=0><tr><td bgcolor="black">';
echo "<a href=\"$PHP_SELF?large=" . $piccy[$l] . "\">";
// VISER THUMBNAILS
$thumb_mappe = $thumbnail_mappe . "/"; // vi sætter en skråstreg efter undermappens navn
$thumb_name = $thumb_mappe . "thumbnail_" . $piccy[$l];
if (eregi("(\.jpg|\.JPG)$", $piccy[$l])) { // hvis filtype er jpg
if(!file_exists($thumb_name)) {
imageresizejpeg($piccy[$l],$maxwidth,$maxheight,$thumb_name) ;
} else {
$size=getimagesize($piccy[$l]); // laver et array med width og hight
get_size($size,$maxwidth,$maxheight) ;
}
echo '<img src="' . $thumb_name . '" alt="' . $piccy[$l] . '" border=0 width="' . $newwidth .'" height="' . $newheight .'"></a></td></tr></table>';
} else { // hvis filtype ikke er jpg
$size=getimagesize($piccy[$l]); // laver et array med width og hight
get_size($size,$maxwidth,$maxheight) ;
echo '<img src="' . $piccy[$l] . '" alt="' . $piccy[$l] . '" border=0 width="' . $newwidth .'" height="' . $newheight .'"></a></td></tr></table>';
}
// OM NAVNET ER SAT TIL AT BLIVE VIST?
if ($name=="1") {
echo '<center><font face="verdana" color="white" size="1">' . $piccy[$l] . '</center></font>';
}
echo '</td>';
echo"\n";
} // for-løkken slutter
echo '</tr></table></div>';
echo '<br><center><button onclick="location.href=\''.$sti .'\';return false;" class="form">Tilbage til oversigt</button>';
} // else slutter
echo '<br><br><br><div align="center"><font face="verdana" size="1"></a></font></div></body></html>';
?>
Må jeg spørge dig, hvorfor du lukker. Jeg har bidraget med noget kode, og har ikke hørt noget i 1½ måned. Kunne du ikke bruge koden eller ........
Ja, det må du da godt...
Jeg kan ikke lige overskue at benytte gdlib, så jeg scallerer billederne på den gamledags måde via Photoshop!
Men ellers tak for input!