Vorschaubilder erstellen - kleiner Fehler

F

Friedrich

Guest
Hallo,

Mitglieder dürfen ja Bilder auf meine Homepage uploaden. Wenn das Bild zu groß ist, wird es verkleinert, bis die Breite oder die Höhe maximal 600 Pixel betragen.

Einmal klappt es:
http://www.artou.de/bilder/1091661872/1091699573.jpg

Und ein anderes mal wird ein schwarzer Rand angezeigt:
http://www.artou.de/bilder/1091661872/1091699690.jpg

Es gibt auch Bilder, wo rechts und unten ein schwarzer Rand erscheint.

Ich weiß leider nicht, wass ich groß falsch gemacht haben kann.

CODE $getimagesize = getimagesize($datei);
$bildb = $getimagesize[0];
$bildh = $getimagesize[1];
$bildt = $getimagesize[2];

$neubreite=600;
$neuhoehe=600;

############################
# Breite und Höhe des Bildes
############################

if($bildb>$bildh)
{
$bildbn=$neubreite;
$bildhn=$bildh*$bildbn/$bildb;
}
else
{
$bildhn=$neuhoehe;
$bildbn=$bildb*$bildhn/$bildh;
}

if($bildb==$bildh)
{
$bildbn=$neubreite;
$bildhn=$neuhoehe;
}

####################
# Erzeugt neues Bild
####################

$datei=imagecreatefromjpeg($datei);

#######################
# Farben werden gesetzt
#######################

$datein = imagecreatetruecolor($bildbn, $bildhn);

imagecopyresized($datein,$datei,0,0,0,0,$bildbn,$bildhn,$bildb,$bildh);

imagejpeg($datein,"PFAD/$bild.jpg", 90);

Es kann ja eigentlich nur an dem
CODE $bildh*$bildbn/$bildb; liegen, oder? Könnte es sein, dass manchmal eine "ungerade" Zahl irgendwie rauskommt und er dann auf bzw. abrudet (wobei dann halt der schwarze Rand entsteht)?

Wie kann ich das Problem lösen? Wäre es möglich, da es ja schwarz ist, vielleicht zuvor sagen, dass man die Hintergrundfarbe weiß haben möchet? Währe dann zwar noch immer nicht richtig, aber es würde nicht mehr auffallen, da der Hintergrund der Website auch weiß ist.

Friedrich
 
Ich hab keine Ahnung, wie die Image Funktionen von PHP funktionieren, habe sie noch nie getestet, aber es handelt sich m.E. ganz sicher um einen Rundungsfehler. Mach mal die Rechnung mit einem 299X199 Bild.

Ich bin mir jetzt echt nicht sicher, aber runde einfach mal standardmässig ab. $bildhn=floor($bildh*$bildbn/$bildb). Prinzipiell reicht es, merke ich grade, wenn du die Division rundest. Ein Versuch ist es sicher wert.
 
Zurück
Oben