Funktion in eine while schleife

lammpee

Mitglied
Hi
Ich möchte gerne eine Funktion dazu benutzen um Bilder auf eine bestimmte größe zu bringen. Und jetzt besteht das Problem das ich nicht weiß wie ich meine Funktion in eine while schleife einbaue. Ich habe nähmlich immer das Problem das in der Funktion nicht alles funktioniert. was müsste ich noch ändern das die Funktion jedes Bilder bearbeitet ?

PS:
$picturedata[0].$picturedata[1]= Adresse und Dateiname

Funktion:
PHP:
<?php

   function bildergroesse_picture($bild)
   {
//hoehe und breite des bildes auslesen

$info = getimagesize($bild);

$breite = $info[0];
$hoehe = $info[1];
//"auflösungs-faktor" bestimmen
$faktor = $breite/$hoehe;

//hoehe und breite des zur Verfügung stehenden Platzes
$maxhoehe = 112;
$maxbreite = 120;

//ausgabe der neuen breite - html ergänzt die neue hoehe bei weglassen des height attributs
//wenn $neuebreite als width attribut verwendet wird

while($hoehe > $maxhoehe && $breite > $maxbreite)
{
$hoehe--;
$breite--;
$neuebreite = $faktor*$hoehe;		
return $neuebreite;

}
   }

?>

Script wo es benutzt werden soll:
PHP:
 <td>
 <table cellpadding="0" cellspacing="0" width="525" border="0">
<div align="center"><font face="arial" size="2"><b>Klicke auf das Bild um es zu vergrößern!</b></font>
<br></div>

<br>
<tr>
<?php

$eintraege_pro_seite = 10;
$lookshow = 1;

$von = ($_GET['lookshow']-1)*$eintraege_pro_seite;
$bis = $eintraege_pro_seite;


if(!isset($_GET['lookshow']))
{
 $von = 0;
}
else
{
 $lookshow = $_GET['lookshow'];
}
$seitenzaeabfrage = "SELECT id FROM picture WHERE kategorie = 'User_Bilder'";
$seitenzaeergebnis = mysql_query($seitenzaeabfrage);
$anzahl = mysql_num_rows ($seitenzaeergebnis);

echo"<div align=center>";
echo SeitenAusgabe($anzahl, $eintraege_pro_seite, 5, $_GET['lookshow'], "index.php?show=7&bildershow=5", "&", "lookshow");
echo"</div>";

$picturezaehler =0;
$pictureabfrage = "SELECT adresse, dateiname, kategorie FROM picture WHERE kategorie = 'User_Bilder' LIMIT $von, $bis ";
$pictureergebnis = mysql_query($pictureabfrage);

while ($picturedata = mysql_fetch_array ($pictureergebnis, MYSQL_NUM))
{
bildergroesse_picture($picturedata[0].$picturedata[1]); // Hier wird die Funktion verwendet
   $width = bildergroesse_picture($neuebreite);
if ($k<'2'){
        $k++;
echo"
<td valign=top align=center>
<a href=$picturedata[0]$picturedata[1] target=_blank><img border=0  width=$width src=$picturedata[0]$picturedata[1] alt=$picturedata[1]></a>

</td>";
      }

      else {
        $k='1';


echo"
</tr>
 <tr>
<td valign=top align=center>
<a href=$picturedata[0]$picturedata[1] target=_blank><img border=0  width=$width src=$picturedata[0]$picturedata[1] alt=$picturedata[1]></a>
</td>";
}

}

echo"<p><font face=arial size=2 color=>Es gibt <b>$anzahl</b> ";
if ($anzahl>1)
{
echo"<font face=arial size=2 color=>Bilder.</font></p>";
}
elseif ($anzahl<1)
{
echo"<font face=arial size=2 color=>Bilder.</font></p>";
}
else
{
echo"<font face=arial size=2 color=>Bild.</font></p>";
}

if ($k<'1')
{
echo"<div align=center><font face=arial size=2><b>Leider gibt es noch keine Bilder in dieser Kategorie.</b></font></div>";
}
else
{

}


?>

</table>
 </td>
   <table width="550" height="25" background="extra/design/Seiten_Layout/Fenster_Ende.gif"><td></td></table>
 
PHP:
bildergroesse_picture($picturedata[0].$picturedata[1]); // Hier wird die Funktion verwendet
   $width = bildergroesse_picture($neuebreite);

So ganz versteh ich das nicht, erst wird ein Bildpfad übergeben, das ist noch in Ordnung, dann aber eine neue Breite?
Probier mal Assoziative Arrays und benutz die Bezeichner dieser, dann ist der Code auch echt einfacher zu lesen.

Des Weiteren würde ich deine Funktion ein wenig überarbeiten. Diese kannst nämlich nur für dein Bsp anwenden.

PHP:
<?php

   function bildergroesse_picture($bild,$m_width,$m_height)
   {
//hoehe und breite des bildes auslesen

$info = getimagesize($bild);

$breite = $info[0];
$hoehe = $info[1];

//"auflösungs-faktor" bestimmen

IF (($breite/$hoehe)<=1) 
  $faktor = $breite/$hoehe;
ELSE 
  $faktor = $hoehe/$breite;

$size['breite'] = $m_width*$faktor;
$size['hoehe'] = $m_height*$faktor;

return $size;
  }
}

?>

So, dass sollte . Habs jetzt aber nicht getestet. Zurückgegeben wird ein Assoziatives Array.

$newsize = bildgroesse_picture([Datei],[Breite],[Hoehe]);

Jetzt liegt auf $newsize['breite'] die neue Breite und Höhe dürfte selbsterklärend sein.

Gruß TvP
 
Ich will mit der funktion die Proportion einhalten wenn ich das bild kleiner mache und bei dem beispiel von dir fehlt ein 2 argument
 
Genau das machst du, du bekommst ne neue Höhe und Breite, die sich nach deinen Vorgaben richten.
Es fehlt mir ein wenig die Struktur in deinem Code.
Des Weiteren bräuchte ich mal ne Fehlermeldung, um zu sehen, wo in deinem Programm welcher Fehler entsteht.

Gruß TvP
 
Ist die Fehlermeldung nicht selbstreklärend? Die bildergroesse_picture()-Funktion erwartet drei Parameter.
 
naja diese antwort hilft mir net weiter ich brauche unbendingt hilfe. Wie kriege ich die funktion die ich als erstes gezeigt habe so hin, das ich sie in einer while schleife verwenden kann?

Der nimmt nähmlich nicht von jeder datei die höhe und breite und dann zeigt er diese fehlermeldung an Warning: Division by zero weil er es net rechnen kann.
 
ich wenn es geht doch meine funktion behalten. Aber nochmals danke für das angebot.
Hat den keiner eine Lösung für diese Funktion ?
 
Zuletzt bearbeitet:
Neues Spiel, neues Glück:
PHP:
$query = '
	SELECT
	        CONCAT(`adresse`,`dateiname`) AS `pfad`,
	        `kategorie`
	  FROM
	        `picture`
	  WHERE
	        `kategorie` = "User_Bilder"
	  LIMIT
	        '.$von.', '.$bis.'
	';
$result = mysql_query($query)
	or die(mysql_error());
while( $row = mysql_fetch_assoc($query) ) {
	echo '<a href="'.$row['path'].'" target="_blank"><img width="'.bildergroesse_picture($row['path']).' src="'.$row['path'].'" alt=""></a>';
}
Dazu folgende Funktionsdefinition:
PHP:
function bildergroesse_picture( $bild )
{
	if( ($info = getimagesize($bild)) === false ) {
		return false;
	}
	$breite = $info[0];
	$hoehe = $info[1];
	$faktor = $breite/$hoehe;

	$maxhoehe = 112; 
	$maxbreite = 120; 

	while( $hoehe > $maxhoehe && $breite > $maxbreite ) {
		$hoehe--;
		$breite--;
		$neuebreite = $faktor*$hoehe;
	}
	return $neuebreite;
}
 
Zurück