Großes Bild von php-Seite nur verkleinert anzeigen lassen.

mactrisha

mactrisha

Aktives Mitglied
Thread Starter
Dabei seit
27.11.2003
Beiträge
744
Reaktionspunkte
17
Hi all,

in meiner dynamischen Seite wird ein Bild so angezeigt:

HTML:
<img src='<?php echo "motiv_01/upload_01/".$motiv_01->Value("motiv_bildurl_01")?>' alt="" height="170" width="213" border="0">

Dabei handelt es sich aber um ein Bild, das in hoher Auflösung auf dem Server steht und nur im Browser auf 170 x 213 verkleinert wird. Die Bytezahl bleibt natürlich und das verkleinerte Bild lädt sehr lange. Jetzt will ich das Bild aber nur für den Moment der Anzeige verkleinert in der Größe 170 x 213 darstellen lassen. Ich will es aber nicht als Thumbnail auf den Server hochspeichern. Wie kann ich das machen?

Das funktioniert schon:
PHP:
<?php
header('Content-type: image/jpeg');
$myimage = resizeImage('2475-13.jpg', '213', '170');
print $myimage;

function resizeImage($filename, $newwidth, $newheight){
list($width, $height) = getimagesize($filename);
if($width > $height && $newheight < $height){
$newheight = $height / ($width / $newwidth);
} else if ($width < $height && $newwidth < $width) {
$newwidth = $width / ($height / $newheight);
} else {
$newwidth = $width;
$newheight = $height;
}
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return imagejpeg($thumb);
}
?>

Dieses Script tut, was ich will, aber es stellt das neue kleine Bild in einer eigenen Seite dar. Wie könnte ich es machen, dass mein Code <img src='<?php echo "motiv_01/upload_01/".$motiv_01->Value("motiv_bildurl_01")?>' alt="" height="170" width="213" border="0"> schon diese verkleinerte Anzeige automatisch übernimmt, meine bisherigen Versuche haben immer einen Konflikt mit dem Header ergeben, weil das Script oben einen header('Content-type: image/jpeg'); für die Anzeige definiert und meine Seite, in der die Codezeile <img src='<?php echo "motiv_01/upload_01/".$motiv_01->Value("motiv_bildurl_01")?>' alt="" height="170" width="213" border="0"> drin ist ja nicht Content-type: image/jpeg ist.

Wie könnte ich das denn lösen? Kann mir jemand einen Denkanstoß geben, bitte?

Salü,
mactrisha.
 
imagemagick stellt Dir Routinen bereit, die Bilder, unter anderem auch, skalieren können. Damit reduzierst Du dann auch die Menge der zu transferierenden Daten!
Ist in so einem Falle ein gutes Image-Subsystem und kann von PHP aus aufgerufen werden.
 
du könntest die bilder auch temporär auf dem server speichern, so hast du jedenfalls gewährleistet, dass das bild auch problemlos einbindbart ist. wenn du deinen webspace nicht zu arg belasten willst, kannst du die entsprechenden ja mittels eines delete scripts nach x stunden löschen. prinzipiell besser, da weniger serverlastig, ist es aber, die thumbs zu speichern. hat sich zumindest bei stark frequentierten pages, die auch die gd nutzen herausgestellt. Wie sich das mit IM verhält, kann ich nicht sagen.
 
mactrisha schrieb:
Wie könnte ich das denn lösen? Kann mir jemand einen Denkanstoß geben, bitte?

speicher den code in einer eigenen datei ab und rufe dann diese datei in deiner seite auf.

z.B. /thumbnail.php?bild=<?echo $bild; ?>

$bild muss dabei die info sein, welches das thumbnail-script braucht, um das richtige bild zu finden.
 
Hi all,

ich brauche nochmal eure Hilfe in dieser Sache.
Jetzt habe ich einen anderen Code gefunden und abgeändert, dieser macht jetzt ein Bild kleiner, wie ich es will, aber nur ein Bild, das man vorher in der letzten Zeile mit dem Pfad dahin festlegt.

PHP:
<?
function ResizeImage($url, $maxvalue, $type='width')
{
	$ImgInfo = getimagesize($url);
$ImgWidth = $ImgInfo[0];
	$ImgHeight = $ImgInfo[1];
if (($ImgHeight > $maxvalue) && ($type=='height'))
{
	$ImgHeight = $maxvalue;
	$percent = ($ImgInfo[1] / $ImgHeight);
	$ImgWidth = ($ImgInfo[0] / $percent);
	}
	if (($ImgWidth > $maxvalue) && ($type=='width'))
	{
		$ImgWidth = $maxvalue;
		$percent = ($ImgInfo[0] / $ImgWidth);
		$ImgHeight = ($ImgInfo[1] / $percent);
	}
return '<img src="'.$url.'" style="width:'.round($ImgWidth).'px; height:'.round($ImgHeight).'px; margin:10px 0 10px 0; border:0 none;" alt="" />';
}
echo ResizeImage('http://www.domain.de/pfadzum/bild.jpg',213,'width');
?>

Mein Problem ist jetzt, dass das Bild aber dynamisch aus einer Datenbank ausgelesen wird
Code:
<img src='<?php echo $aktuell->Value("akt_bild")?>' alt="" border="0">
in der Datenbanktabelle ist der Pfad zu dem jeweiligen Bild gespeichert, der durch $aktuell->Value("akt_bild") eingelesen wird.

Mein Problem ist jetzt, dass wenn ich die Zeile mit der Variable zum Bild wie folgt aktualisiere, dann bekomme ich eine Fehlermeldung:

PHP:
echo ResizeImage('http://www.domain.de/pfadzum/bild.jpg',213,'width');
echo ResizeImage('http://www.domain.de/$aktuell->Value("akt_bild")',213,'width');

weil in die url nicht der Wert der Variable übernommen wird, sondern das $aktuell->Value("akt_bild") gesucht wird, wie man hier in der Fehlermeldung sieht. In die url müsste aber der jeweilige Pfad zum Bild aus der Datenbank stehen, wie kann ich diesen Code richtig schreiben?

<ERROR Number="2" Description="Error: &quot;getimagesize (http://www.domain.de/$aktuell-&gt;Value(&quot;akt_bild&quot;)): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
&quot; on line 43 of /Library/WebServer/Documents/~pfadzu/phpscrip/test_resize.php."/>

Salü,
mactrisha.
 
Das ist vermutlich ein Quoting Problem.
Versich mal
PHP:
echo ResizeImage("http://www.domain.de/$aktuell->Value(\"akt_bild\")",213,'width');
oder
PHP:
echo ResizeImage("http://www.domain.de/$aktuell->Value(akt_bild)",213,'width');
oder
PHP:
echo ResizeImage("http://www.domain.de/$aktuell->Value('akt_bild')",213,'width');

Alternativ kannst Du folgendes versuchen:
PHP:
$bildpfad="http://www.domain.de/".$aktuell->Value("akt_bild");
echo ResizeImage($bildpfad,213,'width');
Ist für meine Begriffe etwas übersichtlicher.
 
Hi maceis,

Danke, das war es, juhu, es geht!

PHP:
$bildpfad="http://www.domain.de/".$aktuell->Value("akt_bild");
echo ResizeImage($bildpfad,213,'width');

Salü,
mactrisha.
 
Zurück
Oben Unten