2009-12-02 3 views
1

Je cherche de l'aide/des suggestions pour trouver le moyen le plus efficace de redimensionner une image pour être aussi petit que possible en utilisant PHP/GD tout en préservant les proportions de l'image originale mais en veillant à ce que l'image redimensionnée soit plus grande qu'une largeur minimale définie & hauteur. Par exemple, l'image redimensionnée doit avoir une largeur de > = 400 et une hauteur> = 300 mais doit être aussi proche de ces dimensions que possible tout en conservant le format d'origine.Redimensionnement d'image dans (PHP/GD)

tel qu'un « paysage » l'image aurait une hauteur idéale de 300 ou légèrement plus grande avec une largeur > = 400 et un « portrait » image aurait une largeur idéale de 400 ou légèrement plus grande avec hauteur> = 300.

Répondre

0

Cela semble faire le travail ...

$data = @getimagesize($image); 

    $o_w = $data[0]; 
    $o_h = $data[1]; 
    $m_w = 400; 
    $m_h = 300; 

    $c_w = $m_w/$o_w; 
    $c_h = $m_h/$o_h; 

    if($o_w == $o_h){ 
      $n_w = ($n_w >= $n_h)?$n_w:$n_h; 
      $n_h = $n_w; 
    } else { 
      if($c_w > $c_h) { 
       $n_w = $m_w; 
       $n_h = $o_h * ($n_w/$o_w); 
      } else { 
       $n_h = $m_h; 
       $n_w = $o_w * ($n_h/$o_h); 
      } 
    } 
+0

Quelques commentaires ou explication serait utile de comprendre la logique et les conditions – Philipp

5

Je crois que c'est ce que vous cherchez; Plus précisément, les images dans la colonne du milieu:

When source image is wider When source image is taller When aspect ratios are same

code suivant est dérivé de Crop-To-Fit an Image Using ASP/PHP:

list(
    $source_image_width, 
    $source_image_height 
) = getimagesize('/path/to/image'); 

$target_image_width = 400; 
$target_image_height = 300; 

$source_aspect_ratio = $source_image_width/$source_image_height; 
$target_aspect_ratio = $target_image_width/$target_image_height; 

if ($target_aspect_ratio > $source_aspect_ratio) 
{ 
    // if target is wider compared to source then 
    // we retain ideal width and constrain height 
    $target_image_height = (int) ($target_image_width/$source_aspect_ratio); 
} 
else 
{ 
    // if target is taller (or has same aspect-ratio) compared to source then 
    // we retain ideal height and constrain width 
    $target_image_width = (int) ($target_image_height * $source_aspect_ratio); 
} 

// from here, use GD library functions to resize the image 
Questions connexes