2010-07-21 5 views
0

J'utilise imagecopyresampled pour créer des vignettes basées sur une certaine largeur et hauteur. Le problème que j'ai est que leur taille est écrasée. Ce que je veux, c'est que toutes les images miniatures soient en 140x84 et que leur rapport d'aspect ne corresponde pas au fait que les parties supérieures et inférieures de l'image soient recadrées au centre.Imagecopyresampled Auto-Crop Image

Voici ce que j'ai jusqu'à présent, toutes les idées seraient grandement appréciées.

// Create Thumbnail 

     $imgsize = getimagesize($targetFile); 
    switch(strtolower(substr($targetFile, -3))){ 
     case "jpg": 
      $image = imagecreatefromjpeg($targetFile);  
     break; 
     case "png": 
      $image = imagecreatefrompng($targetFile); 
     break; 
     case "gif": 
      $image = imagecreatefromgif($targetFile); 
     break; 
     default: 
      exit; 
     break; 
    } 

    $width = 140; //New width of image  
    $height = $imgsize[1]/$imgsize[0]*$width; //This maintains proportions 

    $x_mid = $width/2; //horizontal middle 
    $y_mid = $height/2; //vertical middle 

    $src_w = $imgsize[0]; 
    $src_h = $imgsize[1]; 


    $picture = imagecreatetruecolor($width, $height); 
    imagealphablending($picture, false); 
    imagesavealpha($picture, true); 
    $bool = imagecopyresampled($picture, $image, 0, 0, 0, ($y_mid-(84/2)), $width, $height, $src_w, $src_h); 

    if($bool){ 
     switch(strtolower(substr($targetFile, -3))){ 
      case "jpg": 
       header("Content-Type: image/jpeg"); 
       $bool2 = imagejpeg($picture,$file_dir."/thumbs/".$imageName,85); 
      break; 
      case "png": 
       header("Content-Type: image/png"); 
       imagepng($picture,$file_dir."/thumbs/".$imageName); 
      break; 
      case "gif": 
       header("Content-Type: image/gif"); 
       imagegif($picture,$file_dir."/thumbs/".$imageName); 
      break; 
     } 
    } 


    imagedestroy($picture); 
    imagedestroy($image); 
+0

Voir la réponse automatique à cette question: [Image de recadrage PHP pour fixer la largeur et la hauteur sans perdre le ratio] (http://stackoverflow.com/questions/3255773/php-crop-image-to-fix-width- et-hauteur-sans-perdre-dimension-ratio/3255906 # 3255906) – Mike

+0

Merci Mike, la réponse de Sven sur cette page a parfaitement fonctionné! – Paul

Répondre

0

Vous devez d'abord travailler si vous voulez redimensionner votre image en fonction de sa hauteur ou de sa largeur. Vous travaillez généralement en fonction de l'image d'origine (portrait ou paysage) et de l'orientation de la taille d'image souhaitée. Vous devez ensuite travailler sur l'autre bord par programme de votre choix. Une fois que vous en avez, vous pouvez simplement rééchantillonner votre image originale en (0,0) et les données d'image suspendues seront tronquées.