# Bild skalieren, dann beschneiden



## silicone (1. Juli 2004)

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?


----------



## Krypthonas (1. Juli 2004)

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


----------



## silicone (1. Juli 2004)

Folgendes Skript habe ich momentan am Laufen:


```
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?


----------



## silicone (2. Juli 2004)

Danke für eure Hilfe. Habe es jetzt so gelöst:

```
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


----------

