Moin!
ich möchte ein Bild, welches beispielsweise eine Grösse von 640 x 480 Pixel hat, auf eine Grösse von beispielsweise 200 x 200 Pixel bringen ohne das Seitenverhältnis zu verfäschen. Dazu hab ich jetzt folgenden Code geschrieben:
Geh mal theoretisch deinen Code durch:
$width = 640;
$height = 480;
if ($width < $height)
-> nö...
{
}
else
{
$newwidth = 200;
$newheight = 200;
Bis hierhin ist es schön. Du bist in Falldefinition "Bild ist breiter als hoch".
$faktor = 200 / $height;
Wozu dieser Faktor?
$zh = round($width * $faktor);
Ähm... ?
$tocut = round(($zh - $newwidth) / 2);
Ok, du rechnest also irgendwie wild herum. Warum?
Laut meinen Tipps aus [pref:t=47556&m=259466] solltest du lediglich berechnen, welche Startkoordinate du benötigst.
Also in diesem Fall (breiter als hoch):
$start = ($width - $height) /2;
Und dann kopierst du ein $height*height großes Bild, was bei $start,0 beginnt, nach 0,0,$newwidth,$newheight.
Bedenke: Du willst einen Bildausschnitt haben, der quadratisch ist, also genauso breit wie hoch. Wenn das Bild breiter ist, nimmst du als Maßangabe die Höhe...
imagecopyresized($im,$src,0,0,$tocut,0,$newwidth,$newheight,$width,$height);
Nur nimmst du _hier_ als Maßangabe für die Breite die _Breite_, und nicht die Höhe. Deshalb verzerrt es.
imagecopyresized($im,$src,0,0,$start,0,$newwidth,$newheight,$height,$height);
sollte genau das tun, was du willst.
Im anderen Fall kommt als Maß dann logischerweise zweimal $width vor.
}
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|