tomstig
OC Addicted
|
Irgendwie will das nicht: <?php
error_reporting(E_ALL);
if ($handle = opendir('pics')) {
$i = 0;
while(false !== ($file = readdir($handle))){
if( $file != "." && $file != ".." ){
$info = getimagesize('./pics/' . $file);
if( $info['mime'] == 'image/jpeg' ){
$breitalt = $info[0];
$hochalt = $info[1];
$breit = 100;
$hoch = ceil($hochalt*$breit/$breitalt);
if( $breitalt > $breit ){
$bildalt = imagecreatefromjpeg('./pics/' . $file);
$bildneu = imagecreate($breit , $hoch);
imagecopyresized($bildneu , $bildalt , 0 , 0 , 0 , 0 , $breit , $hoch , $breitalt , $hochalt);
header("Content-Type: image/jpeg");
imagejpeg($bildneu);
imagedestroy($bildalt);
imagedestroy($bildneu);
}
}else{
echo '<a href="./pics/' . $file . '" alt="">' . $file . '</a>';
}
$i++;
}
#if( $i % 5 == 0 )
echo '<br />';
}
closedir($handle);
}
?>
Fehlermeldung: The image “ http://localhost/www/gallery/readdir.php” cannot be displayed, because it contains errors. Hingegen das funktioniert: <?php
error_reporting(E_ALL);
$breit = 100;
$quellbild = './pics/katze.jpg';
$info = getimagesize($quellbild);
$breitalt = $info[0];
$hochalt = $info[1];
$hoch = ceil($hochalt*$breit/$breitalt);
if( $breitalt > 100 ){
$bildalt = imagecreatefromjpeg($quellbild);
$bildneu = imagecreate($breit , $hoch);
imagecopyresized($bildneu , $bildalt , 0 , 0 , 0 , 0 , $breit , $hoch , $breitalt , $hochalt);
header("Content-Type: image/jpeg");
imagejpeg($bildneu);
imagedestroy($bildalt);
imagedestroy($bildneu);
}
?>
=> Die Schleife wird dran schuld sein.... Wie gehört es richtig?
|
watchout
Legendundead
|
Zwei dinge: Einerseits solltest du dir den Ablauf eines Seitenaufbau's einer Homepage klarmachen. Andererseits wäre es praktisch, würdest du deinen Code so formatieren, dass man nicht beim lesen schon durcheinander kommt.
Achja, und noch... Kommentare... Ich denke wenn du dir Kommentare reinschreibst, die visualisieren was du machen willst, wirst du auch gleich erkennen wo du den Denkfehler untergebracht hast.
BTW: Die Schleife an sich ist nicht Schuld...
|
tomstig
OC Addicted
|
<?php
error_reporting(E_ALL);
if ($handle = opendir('pics')) {
$i = 0;
# Schleife, die alle Dateien in dem Ordner durchgeht
while(false !== ($file = readdir($handle))){
if( $file != "." && $file != ".." ){
# informationen von dem bild werden eingeholt
$info = getimagesize('./pics/' . $file);
# wenn das bild ein jpg ist, soll es verkleinert werden
if( $info['mime'] == 'image/jpeg' ){
$breitalt = $info[0]; # derzeitige breite
$hochalt = $info[1]; # derzeitige höhe
$breit = 100; # gewünschte neue breite
$hoch = ceil($hochalt*$breit/$breitalt); # gewünschte neue höhe wird im verhältnis zur gewünschten breite ausgerechnet
if( $breitalt > $breit ){ # wenn das bild schon kleiner als die gewünschte breite ist, braucht es nicht verändert werden
$bildalt = imagecreatefromjpeg('./pics/' . $file); # bild mit den originalen größen wird erzeugt
$bildneu = imagecreate($breit , $hoch); # ein neues leeres bild mit den neuen höhen wird erstellt
imagecopyresized($bildneu , $bildalt , 0 , 0 , 0 , 0 , $breit , $hoch , $breitalt , $hochalt); # bild mit neuen größen wird in $bildneu gespeichert
header("Content-Type: image/jpeg"); # browser wird auf ein jpeg "vorbereitet"
imagejpeg($bildneu); # bild wird ausgegeben
imagedestroy($bildalt);
imagedestroy($bildneu);
}
# wenn das bild kein jpg ist, soll es einfach nur mit link anklickbar sein (wird hier nur testweise so gemacht)
}else{
echo '<a href="./pics/' . $file . '" alt="">' . $file . '</a>';
}
$i++;
}
#if( $i % 5 == 0 )
echo '<br />';
}
closedir($handle);
}
?>
und jetzt?
|
dio
Here to stay
|
Damit ich das richtig versteh: Du willst if( $file != "." && $file != ".." ){
.
.
.
}else{
echo '<a href="./pics/' . $file . '" alt="">' . $file . '</a>';
}
das wirklich so haben?
|
watchout
Legendundead
|
Ich hab das hier nur (zumindest für mich) lesbarer gestaltet... <?php
error_reporting(E_ALL);
if ($handle = opendir('pics')) {
$i = 0;
# Schleife, die alle Dateien in dem Ordner durchgeht
while(false !== ($file = readdir($handle))){
if( $file != "." && $file != ".." ){
# informationen von dem bild werden eingeholt
$info = getimagesize('./pics/' . $file);
# wenn das bild ein jpg ist, soll es verkleinert werden
if( $info['mime'] == 'image/jpeg' ){
# derzeitige breite
$breitalt = $info[0];
# derzeitige höhe
$hochalt = $info[1];
# gewünschte neue breite
$breit = 100;
# gewünschte neue höhe wird im verhältnis zur gewünschten breite ausgerechnet
$hoch = ceil($hochalt*$breit/$breitalt);
# wenn das bild schon kleiner als die gewünschte breite ist, braucht es nicht verändert werden
if( $breitalt > $breit ){
# bild mit den originalen größen wird erzeugt
$bildalt = imagecreatefromjpeg('./pics/' . $file);
# ein neues leeres bild mit den neuen höhen wird erstellt
$bildneu = imagecreate($breit , $hoch);
# bild mit neuen größen wird in $bildneu gespeichert
imagecopyresized($bildneu , $bildalt , 0 , 0 , 0 , 0 , $breit , $hoch , $breitalt , $hochalt);
# browser wird auf ein jpeg "vorbereitet"
header("Content-Type: image/jpeg");
# bild wird ausgegeben
imagejpeg($bildneu);
imagedestroy($bildalt);
imagedestroy($bildneu);
}
# wenn das bild kein jpg ist, soll es einfach nur mit link anklickbar sein (wird hier nur testweise so gemacht)
}else{
echo '<a href="./pics/' . $file . '" alt="">' . $file . '</a>';
}
$i++;
}
#if( $i % 5 == 0 )
echo '<br />';
}
closedir($handle);
}
?>
Ja, dio hat's schon angedeutet... Ich dachte du merkst es selbst - du willst Bilder direkt in den HTML-Code ausgeben. das geht schlichtweg (oder zumindest so wie du es machst - und in den meisten Browsern) nicht, du kannst nur links zu Bildern ausgeben Wenn du ein Bild resizen willst und dann ausgeben darf das nur der absolut einzige Content sein den du ausgibst - nur das Bild, sonst nichts. Wenn du ne Fehlermeldung hast, zerstört die das Bild - Genauso jede andere Ausgabe (per echo, print,...). Der richtige Header fehlt in deinem Fall auch noch.
|
tomstig
OC Addicted
|
Wenn du ein Bild resizen willst und dann ausgeben darf das nur der absolut einzige Content sein den du ausgibst - nur das Bild, sonst nichts. Wenn du ne Fehlermeldung hast, zerstört die das Bild - Genauso jede andere Ausgabe (per echo, print,...). Der richtige Header fehlt in deinem Fall auch noch. Sowas in der Art hab ich mir schon gedacht, nur wie funktionieren dann alle Galerien mit Thumbnails?
|
dio
Here to stay
|
Ich versteh zwar deine Frage nicht richtig, aber: <img src="bildscript.php?id=123">
|
semteX
begehrt die rostschaufel
|
Sowas in der Art hab ich mir schon gedacht, nur wie funktionieren dann alle Galerien mit Thumbnails? genauso wie es dio schon gesagt hat! Du musst aber dazu (wie oben schon gesagt wurde) ALLE "textmeldungen" rausgeben. da darf NIX anders sein. keine ausgabe, NUR das bild. oder du bekommst den fehler, den du geschrieben hast. kommentier mal bitte alle "ausgaben" aus und versuchs nochmal. Sollte dann gehen.
|
tomstig
OC Addicted
|
Das ist das also nicht möglich...
Egal, dann bau ich halt ein Script, dass alle Bilder durchgeht, sie verkleinert, und speichert... wird am einfachsten gehen...
|
watchout
Legendundead
|
was ist nicht möglich? Ich versteh dein Problem nicht...
|
Maehmann
OC Addicted
|
ich glaub er meint das direkt ausgeben eines bildes mit php inkl. zusätzlichem senden von text.
Ich persönlich bevorzuge sowieso die speicherung des thumbnails auf dem server ... spart einiges an performancen, finde ich.
|
tomstig
OC Addicted
|
was ist nicht möglich? Ich versteh dein Problem nicht... Dass ich eine ganz normale Seite habe, mit Menü (ACHTUNG: Menü beeinhaltet Text) und im content-Bereich eine Galerie mit Thumbnails von allen Bildern, die in einem Ordner sind. Ist das möglich?
|
watchout
Legendundead
|
Ist das möglich? klar ist das möglich.
|
tomstig
OC Addicted
|
klar ist das möglich. Deine Antwort hat mich - genau wie die anderen in diesem Thread - um Eckhäuser weitergebracht
|
watchout
Legendundead
|
Deine Antwort hat mich - genau wie die anderen in diesem Thread - um Eckhäuser weitergebracht möchtest du Hilfe oder jemanden der dir dein Script schreibt? Die Sache ist wirklich simpel, man muss nur verstehen wie PHP funktioniert und was PHP macht - das steht auf den ersten Manual-Pages so ausführlich beschrieben, es ist absolut unmöglich das nicht zu verstehen. Du stehst auf der Leitung - das is mir klar, aber ich halte es für sinnlos etwas vorzukauen, dadurch lernt man nichts. Wenn dir natürlich der Lerneffekt egal ist, kann ich dir ein fertiges Script posten an dem du dir anschaun kannst wie's gemacht wird - warum man das aber so macht wirst du vielleicht richtig vermuten, aber das tiefe Verständnis das für kompliziertere Aufgaben in die Richtung notwendig ist wird sich so nicht einstellen. Ich kann natürlich einen Anderen nicht davon abhalten dir die Lösung zu präsentieren, es ist aber gegen meine Überzeugung sowas zu tun - deswegen werde *ich* das nicht tun. Ich hoffe du verstehst mich nicht falsch, ich meins wirklich nicht bös'.
|