Bild skalieren, dann beschneiden

silicone

Grünschnabel
Hallo liebe Leute,

ich habe folgendes Problem:
Ich möchte gerne bilder uploaden, die automatisch auf eine bestimmte Breite proportional skaliert werden (bis hierhin kein Problem). Nun soll das skalierte bild, falls es eine bestimmte Höhe überschreitet auf diese Höhe beschnitten werden.

Kann mir jemand sagen, wie ich das machen soll?
 
Dazu benötigst du den GD Lib Extension. Schau erst einmal nach, ob ein Server das unterstützt oder ob du nachinstallieren musst.

Das Prinzip ist das gleiche beim Beschneiden wie beim Größe Anpassen, du übergibst den GDLIB Befehl(welchen du auf PHP.NET findest) die Positionsangaben von welchen XY Wert zum End XY Wert.

In diesem Sinne
 
Folgendes Skript habe ich momentan am Laufen:

PHP:
function createThumb($bild){

   $url    = $bild;
   $info  = getimagesize($url);
   $width  = $info[0];
   $height = $info[1];
   $type  = $info[2];
   if ($type == 1){
      $image = imagecreatefromgif($url);
   }else if ($type == 2){
      $image = imagecreatefromjpeg($url);
   }else if ($type == 3){
      $image = imagecreatefrompng($url);
   }
   $nwidth  = 245;
   $nheight = $height/($width/$nwidth);
   if ($nheight >170) {
                      	$nheight = 170;
   }
    $image2  = imagecreatetruecolor($nwidth, $nheight);
   imagecopyresampled($image2, $image, 0, 0, 0, 0, $nwidth, $nheight, $width, $height);

   if ($type == 1){
      imagegif($image2, $bild);
   }else if ($type == 2){
      imagejpeg($image2, $bild);
   }else if ($type == 3){
      imagepng($image2, $bild);
   }
}

Ist nicht so prickelnd, da ab einer Höhe < 170 Pixel das Bild skaliert wird, statt es zu beschneiden.

Any Ideas?
 
Danke für eure Hilfe. Habe es jetzt so gelöst:
PHP:
function createThumb($bild){

   $url    = $bild;
   $info  = getimagesize($url);
   $width  = $info[0];
   $height = $info[1];
   $type  = $info[2];
   if ($type == 1){
      $image = imagecreatefromgif($url);
   }else if ($type == 2){
      $image = imagecreatefromjpeg($url);
   }else if ($type == 3){
      $image = imagecreatefrompng($url);
   }
   $nwidth  = 245;
   $nheight = $height/($width/$nwidth);

   //$bheight = 170;
   $image2  = imagecreatetruecolor($nwidth, $nheight);
   imagecopyresampled($image2, $image, 0, 0, 0, 0, $nwidth, $nheight, $width, $height);

   if ($type == 1){
      imagegif($image2, $bild);
   }else if ($type == 2){
      imagejpeg($image2, $bild);
   }else if ($type == 3){
      imagepng($image2, $bild);
   }
   if ($nheight >170) {
                      	$bheight = 170;
    $npos = ($nheight - $bheight) / 2;
   $image3  = imagecreatetruecolor($nwidth, $bheight);
   imagecopyresampled($image3, $image2, 0, 0, 0, $npos, $nwidth, $bheight, $nwidth, $bheight);
   if ($type == 1){
      imagegif($image3, $bild);
   }else if ($type == 2){
      imagejpeg($image3, $bild);
   }else if ($type == 3){
      imagepng($image3, $bild);
   }
   }
}

Falls noch jemand Verbesserungen hat, gerne her damit ;-)

Gruß,
Silicone
 
Zurück