Bilder werden nicht aktualisiert
Halli Hallo,
ich habe ein Verzeichnis namens "Fotos". Dieses beinhaltet wiederum zwei
Unterverzeichnisse. Einmal "200806" und "100907". In jedem dieser
Unterverzeichnisse liegen dann die entsprechenden Fotos.
Nun möchte ich eine Vorschau generieren, d.h. die Routine liest quasi
jeweils das erste Bild aus einem Unterverzeichnis und gibt dieses dann
als Thumbnail aus.
Leider wird aber das Bild nicht aktualisiert. Es wird immer nur der
Thumbnail vom ersten Bild ausgegeben. Dabei habe ich doch extra "time()"
an die JPEG Ausgabe drangehängt. Könnt ihr mir helfen? Vielen Dank im
voraus ...
<?php
$nummer=array(200806,100907);
$anzahl=count($nummer);
$a=0;
while ($a<$anzahl)
{
$nr=$nummer[$a];
$bild="fotos/".$nr."/01.jpg";
$image = getimagesize($bild);
$breite_alt = $image[0];
$hoehe_alt = $image[1];
if ($hoehe_alt>$breite_alt || $hoehe_alt==$breite_alt)
{
$hoehe_neu=130;
$breite_neu=(130/$hoehe_alt)*$breite_alt;
}
if ($hoehe_alt<$breite_alt)
{
$breite_neu=130;
$hoehe_neu=(130/$breite_alt)*$hoehe_alt;
}
$im1 = imagecreatetruecolor($breite_neu, $hoehe_neu);
$im2 = imagecreatefromjpeg($bild);
imagecopyresampled($im1, $im2, 0, 0, 0, 0, $breite_neu, $hoehe_neu,
$breite_alt, $hoehe_alt);
imagejpeg($im1,"tmp.jpg",90);
imagedestroy($im1);
imagedestroy($im2);
echo '<img border="0" src="tmp.jpg?.'.time().'">';
$a++;
}
?>
Re: Bilder werden nicht aktualisiert
Jörg Nieswand schrieb:
>Halli Hallo,
>
>ich habe ein Verzeichnis namens "Fotos". Dieses beinhaltet wiederum zwei
>Unterverzeichnisse. Einmal "200806" und "100907". In jedem dieser
>Unterverzeichnisse liegen dann die entsprechenden Fotos.
>
>Nun möchte ich eine Vorschau generieren, d.h. die Routine liest quasi
>jeweils das erste Bild aus einem Unterverzeichnis und gibt dieses dann als
>Thumbnail aus.
>
>Leider wird aber das Bild nicht aktualisiert. Es wird immer nur der
>Thumbnail vom ersten Bild ausgegeben. Dabei habe ich doch extra "time()" an
>die JPEG Ausgabe drangehängt. Könnt ihr mir helfen? Vielen Dank im voraus
>...
>
>
><?php
>$nummer=array(200806,100907);
>$anzahl=count($nummer);
>$a=0;
>while ($a<$anzahl)
>{
>$nr=$nummer[$a];
foreach kennst du?
>imagejpeg($im1,"tmp.jpg",90);
>echo '<img border="0" src="tmp.jpg?.'.time().'">';
Du hast HTTP noch nicht so ganz verstanden.
Hier mal eine (vermutlich, ist ungetestet) funktionierende Variante, die die
Thumbnails bei jedem Aufruf neu erstellt (das ist zwar
Ressourcenverschwendung, aber bisher machst du auch nichts anderes):
<?php
$nummer=array(200806,100907);
if(!isset($_GET['thumb']))
{
foreach($nummer as $nr)
{
echo '<img border="0" src="?thumb='.$nr.'">';
}
}
else
{
$nr = (int)$_GET['thumb'];
if(!in_array($nr, $nummer))
die();
$bild="fotos/".$nr."/01.jpg";
$image = getimagesize($bild);
$breite_alt = $image[0];
$hoehe_alt = $image[1];
if ($hoehe_alt>$breite_alt || $hoehe_alt==$breite_alt)
{
$hoehe_neu=130;
$breite_neu=(130/$hoehe_alt)*$breite_alt;
}
if ($hoehe_alt<$breite_alt)
{
$breite_neu=130;
$hoehe_neu=(130/$breite_alt)*$hoehe_alt;
}
$im1 = imagecreatetruecolor($breite_neu, $hoehe_neu);
$im2 = imagecreatefromjpeg($bild);
imagecopyresampled($im1, $im2, 0, 0, 0, 0, $breite_neu, $hoehe_neu,
$breite_alt, $hoehe_alt);
header('Content-Type: image/jpeg');
imagejpeg($im1, '', 90);
imagedestroy($im1);
imagedestroy($im2);
}
?>
Beachte, dass das Skript hier dreimal ausgeführt wird und einmal HTML, die
anderen beiden Male JPEG-Daten ausgibt. Gesteuert wird das durch den
Parameter thumb.
--
Wolfgang Fellger
Re: Bilder werden nicht aktualisiert
Jörg Nieswand schrieb:
> $anzahl=count($nummer);
> $a=0;
> while ($a<$anzahl)
> {
> $nr=$nummer[$a];
foreach($nummer as $nr) {
> echo '<img border="0" src="tmp.jpg?.'.time().'">';
Was genau soll time() hier bewirken? HTML-technisch ergibt es keinen Sinn.
Gruß. Claus
Re: Bilder werden nicht aktualisiert
Claus Reibenstein wrote:
> Was genau soll time() hier bewirken? HTML-technisch ergibt es keinen Sinn.
Da sich der Wert des Parameters immer ändert soll es ein Caching verhindern.
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: Bilder werden nicht aktualisiert
Jörg Nieswand schrieb:
> Leider wird aber das Bild nicht aktualisiert. Es wird immer nur der
> Thumbnail vom ersten Bild ausgegeben. Dabei habe ich doch extra "time()"
> an die JPEG Ausgabe drangehängt. Könnt ihr mir helfen? Vielen Dank im
> voraus ...
1. Würde ich *ein* Thumbnail unter *einer* URL veröffentlichen - logisch
2. würde ich somit Thumbnails aller Dateien speichern/cachen
2. Würde ich schauen, ob es die Thumbnail-Datei schon gibt
3. Würde ich deren Generierung beim Bild-Aufruf und nicht beim
HTML-Aufruf machen
Um genau zu sagen, was Deiner Fehler ist müsste man wissen, was Du
willst. Das schreibst Du aber nicht - und der Code ist relativ unsinnig.
Der springende Punkt ist der:
Du generiertst eine Datei und einen Verweis auf sie.
Du überschreibst die Datei und generiert noch einen Verweis auf sie.
Du überschreibst die Datei und generiert noch einen Verweis auf sie.
Du überschreibst die Datei und generiert noch einen Verweis auf sie.
Du (der Browser) ruft die Verweise auf.
Es sollte (grob drübergeguckt) eigentlich eher das letzte und nicht das
erste Bild da sein. Aber wie auch immer: Zumindest hast Du da Race
Conditions.
Grüße, Matthias
--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.
Re: Bilder werden nicht aktualisiert
Jörg Nieswand schrieb:
> $bild="fotos/".$nr."/01.jpg";
Offensichtlich öffnest Du immer nur das Bild '01.jpg'.
Du solltest erstmal alle vorhandenen Dateinamen einlesen. Das selbe gilt
für Deine Unterverzeichnisse; dabei helfen Dir eventuell die php-Funktionen
is_dir() und is_file().
foreach($directories as $dir)
{
... Dateien einlesen
foreach($filenames as $filename)
{
$bild="fotos/$dir/$filename";
...
}
}
Das Skalieren des Bildes würde ich in eine function auslagern. Dann liest
sich der Source besser.
Martin