[PHP] Problem beim Thumbnail erstellen

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_problem_beim_thumbnail_erstellen_146686/page_1 - zur Vollversion wechseln!


tomstig schrieb am 30.07.2005 um 01:04

Irgendwie will das nicht:

Code: PHP
<?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:
Code: PHP
<?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 schrieb am 30.07.2005 um 01:45

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 schrieb am 30.07.2005 um 10:05

Code: PHP
<?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 schrieb am 30.07.2005 um 10:13

Damit ich das richtig versteh: Du willst

Code: PHP
if( $file != "." && $file != ".." ){ 
.
.
.
}else{
                   echo '<a href="./pics/' . $file . '" alt="">' . $file . '</a>';
        } 
das wirklich so haben?


watchout schrieb am 30.07.2005 um 11:30

Ich hab das hier nur (zumindest für mich) lesbarer gestaltet...

Code: PHP
<?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 schrieb am 30.07.2005 um 15:28

Zitat von watchout
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 schrieb am 30.07.2005 um 15:35

Ich versteh zwar deine Frage nicht richtig, aber:

Code: PHP
<img src="bildscript.php?id=123">


semteX schrieb am 30.07.2005 um 15:43

Zitat von tomstig
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 schrieb am 30.07.2005 um 16:25

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 schrieb am 31.07.2005 um 05:40

was ist nicht möglich? Ich versteh dein Problem nicht...


Maehmann schrieb am 31.07.2005 um 11:07

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 schrieb am 03.08.2005 um 12:36

Zitat von watchout
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 schrieb am 03.08.2005 um 13:21

Zitat von tomstig
Ist das möglich?
klar ist das möglich.


tomstig schrieb am 05.08.2005 um 17:55

Zitat von watchout
klar ist das möglich.

Deine Antwort hat mich - genau wie die anderen in diesem Thread - um Eckhäuser weitergebracht :rolleyes:


watchout schrieb am 05.08.2005 um 18:24

Zitat von tomstig
Deine Antwort hat mich - genau wie die anderen in diesem Thread - um Eckhäuser weitergebracht :rolleyes:
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'.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026