Größe von Bildern verändert darstellen

hsch42

Grünschnabel
hallo zusammen

erstmal ein kompliment das forum ist klasse
so nun aber mein problem

ich möchte verschiedene fotos immer in der gleichen größe darstellen entsprechent nach den proportionen

so sieht der code aus

<?
if ($_GET["id"]) {
include ("db_open.php4"); // Datei zu Verbindungsherstellung mit DB
$sql_str = 'SELECT * FROM Immo_wm WHERE id="' . $_GET["id"] . '"';
$result=mysql_query($sql_str);
while ($rows = mysql_fetch_array($result)){


print (' <img src="fotos/' .$rows[userfile2].'" border="0">');

}
mysql_close();
}
?>

wär schön wenn mir jemand helfen könnte
danke
 
Dazu müsstest Du das Bild einlesen, die Größe auslesen und dann entsprechend mit einem Multiplikator bzw. einem Dividenden versehen um das Bild auf die Größe zu verkleinern oder zu vergrößern.

Ansonsten musst Du dem Bild feste Werte geben
Code:
print (<img src="fotos/' .$rows[userfile2].'" border="0" width="xx" height="xxx" />);

So würde ich das zumindest machen.

Als letzte Möglichkeit musst Du halt sagen das nur eine bestimmte Größe erlaubt ist.
 
bei den festen werten stimmen aber dann die proportionen nicht

kannst du mir da vielleicht etwas helfen wie muß das aussehen mit dem bild einlesen ....

danke
 
ich hab mir mal ne php datei geschrieben, um thumbnails zu erstellen und diese dann in flash zu laden, kannst also auch ganz normal als bild benutzen...

thumbnail.php
PHP:
<?
  $max_w=100; 
  $max_h=100;
  $errorstring = "bild ist kaputt";

  $pic = $_GET['pic'];
  $size = @getimagesize ($pic);
  if($size[0]>$size[1]){
    $new_w = $max_w;
    $dif = $size[0]/$max_w;
    $new_h = $size[1]/$dif;
  }else{
    $new_h = $max_h;
    $dif = $size[1]/$max_h;
    $new_w = $size[0]/$dif;
  }
  Header("Content-type: image/jpeg");
  $dst_img=ImageCreate($new_w,$new_h);
  $src_img=@ImageCreateFromJPEG($pic);
  if($src_img){
    ImageCopyResized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img));
    ImageJpeg($dst_img);
  }else{
    $im = @ImageCreate ($max_w,$max_h);
    $bg_color = @ImageColorAllocate ($im, 56, 76, 85);
    $text_color = @ImageColorAllocate ($im, 93, 175, 132);
    @imagecolortransparent($im, $bg_color);
    @imagettftext($im, 16, 45, 15, 90, $text_color, "font.ttf", $errorstring);
    ImageJpeg($im);
  }
?>

das script ist aber nur für jpg's gemacht, sonst musst das ein bissl umbasteln.
wenn du jetzt das bild kleiner laden willst, benutz den code hier...

PHP:
print (' <img src="thumbnail.php?pic=fotos/'.$rows[userfile2].'" border="0">');
dazu muss aber die gb lib installiert sein, sonst kann php nicht die image funktionen benutzen.
[edit]
lad auch noch eine schrift ins selbe verzeichnis und nenn die font.ttf, damit der fehlercode ausgegeben werden kann, sollte das bild platt sein
 
Zuletzt bearbeitet:
hallo
hab leider erst heute probieren können ob es funktioniert
leider nicht

soviel noch
es soll ein neues fenster per javascript geöffnet werden worin dann das geänderte bild dann geöffnet werden soll

so sieht es etwa aus

<script language="JavaScript">
<!--
function foto2_fenster() { //v2.0
open("http://www.immobilienkiosk.de/bild2.php?id=<? print $rows[id]?>",""," width=640, height=480, screenX=0, screenY=0");
}
//-->
</script>
....
und hier der link

print '<a href="javascript:foto2_fenster()"><img src="http://www.name.de/fotos/'.$rows[userfile2].'" width="80" height="80" border="0"></a>&nbsp;&nbsp;&nbsp;';

die id wird übergeben und im neuen fenster wird das bild "userfile2" in dem fall wird im neuen fenster angezeigt funktioniert auch nur eben nicht jedes gleich groß
vielleicht kann mir nochmal jemand helfen wär sehr dankbar
 
Grundlegender Ablauf:
- Klick auf Link
- Link öffnet mit JavaScript ein neues Fenster
- Neues Fenster enthält Bild mit vorgegebener Größe

*hmmm* Okay, machen wir uns erstmal einen Plan was wir brauchen:
Wir brauchen eine Funktion die die Größe des Images ausliest und dann auf die entsprechende Proportion verkleinert, vergrößert etc.
Diese Funktion wird in dem Fenster aufgerufen welches das Bild enthält und per JavaScript öffnet.

Vielleicht geht es ja so:
PHP:
<?
	function ResizeImage($strImage, $iImageMaxX, $iImageMaxY)
	{
		// Werte einlesem
		$sizeOfImage = getimagesize($strImage);
		
		// gibt es eine differenz zwischen breite und hoehe?
		if($sizeOfImage[0] > sizeOfImage[1])
		{
			// ja
			$difference = $sizeOfImage[0] / $iImageMaxX;
			$iNewHeight = $sizeOfImage[1] / $difference;
			$iNewWidth  = $iImageMaxX;
		}
		else
		{
			$difference = $sizeOfImage[1] / $iImageMaxY;
			$iNewWidth  = $sizeOfImage[0] / $difference;
			$iNewHeight = $iImageMaxY;
		}
		
		// zwischen den einzelnen typen unterscheiden
		switch ($sizeOfImage[2])
		{
			case 1:
				$oldImage	= ImageCreateFromGIF($strImage);
				$imageType	= "image/jpeg";
				break;
			case 2:
				$oldImage	= ImageCreateFromJPEG($strImage);
				$imageType	= "image/gif";
				break;
			case 3:
				$oldImage	= ImageCreateFromPNG($strImage);
				$imageType	= "image/png";
				break;
		}
		
		// neuen header fuer bild erstellen, abhaengig von Imagetype
		header("Content-type: " . $imageType);
		
		// neues bild erstellen
		$newImage = ImageCreate($iNewWidth, $iNewHeight);
		// altes bild in neues vergroeßert oder verkleinert kopieren
		ImageCopyResized($newImage, $oldImage, 0, 0, 0, 0, $iNewWidth, $iNewHeight, ImageSX($oldImage), ImageSY($oldImage));
		
		// wieder fallunterscheidung von bildtyp und erstellen von bild aufgrund von Imagetype
		switch ($sizeOfImage[2])
		{
			case 1:
				ImageGIF($newImage);
				break;
			case 2:
				ImageJPEG($newImage);
				break;
			case 3:
				ImagePNG($newImage);
				break;
		}
	}
?>
Diese Funktion rufst Du nun in Deiner "bild.php" auf und übergibst folgende Werte:
$image = ResizeImage("bild.jpg", "400", "200");
print "<img src=\"" . $image . "\" height=\"200\" width=\"400\" />";

Die Funktion nimmt also die Werte Bild (das Bild das verändert werden soll), Maximale Breite (die das neue Bild haben soll) und Maximale Höhe (die das neue Bild haben soll) an.

@socke|bla: Kein schlechter Ansatz. Hab ihn nur ein bißchen ausgebaut, also nicht sauer sein das ich ihn kopiert habe ;)

*puuuh* Mal sehen ob's klappt. Konnte es selbst nicht ausprobieren.
 
danke für deine hilfe
aber es funktioniert nicht das ergebnis sieht bei mir so aus
woran kann es liegen

Warning: Cannot add header information - headers already sent by (output started at /mnt/ls1/03/361/00000007/htdocs/immobilien/bild.php:13) in /mnt/ls1/03/361/00000007/htdocs/immobilien/bild.php on line 66
ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v2.0 (using IJG JPEG v62), default quality

icon4.gif
digi: habe die Fehlermeldung ein wenig gekürzt, sonst ist sie so riesengroß
 
Zurück