2012-04-04 3 views
0

Je n'ai pas beaucoup de temps à écrire donc je vais vous dire mon problème, j'ai un code php qui recadre les images la bonne chose est qu'il recadre des images vraiment bien quand je mets $ thumb_width et $ thumb_height avec la même valeur, mais dans ce cas je ne fais pas ce que je veux l'image avec cette résolution (200 * 150) voici le code et je ne trouve pas l'erreur.crop image php déformé, déformé

<?php 
function create_thumb($directory, $image, $destination) { 
$image_file = $image; 
$image = $directory.$image; 

if (file_exists($image)) { 

$source_size = getimagesize($image); 

if ($source_size !== false) { 

    $thumb_width = 200; 
    $thumb_height = 150; 

    switch($source_size['mime']) { 
    case 'image/jpeg': 
     $source = imagecreatefromjpeg($image); 
    break; 
    case 'image/png': 
     $source = imagecreatefrompng($image); 
    break; 
    case 'image/gif': 
     $source = imagecreatefromgif($image); 
    break; 
    } 

    $source_aspect = round(($source_size[0]/$source_size[1]), 1); 
    $thumb_aspect = round(($thumb_width/$thumb_height), 1); 

    if ($source_aspect < $thumb_aspect) { 
    $new_size = array($thumb_width, ($thumb_width/$source_size[0]) * $source_size[1]); 
    $source_pos = array(0, ($new_size[1] - $thumb_height)/2); 
    } else if ($source_aspect > $thumb_aspect) { 
    $new_size = array(($thumb_width/$source_size[1]) * $source_size[0], $thumb_height); 
    $source_pos = array(($new_size[0] - $thumb_width)/2, 0); 
    } else { 
    $new_size = array($thumb_width, $thumb_height); 
    $source_pos = array(0, 0); 
    } 

    if ($new_size[0] < 1) $new_size[0] = 1; 
    if ($new_size[1] < 1) $new_size[1] = 1; 

    $thumb = imagecreatetruecolor($thumb_width, $thumb_height); 
    imagecopyresampled($thumb, $source, 0, 0, $source_pos[0], $source_pos[1], $new_size[0],                $new_size[1], $source_size[0], $source_size[1]); 

    switch($source_size['mime']) { 
    case 'image/jpeg': 
     imagejpeg($thumb, $destination.$image_file); 
    break; 
    case 'image/png': 
      imagepng($thumb, $destination.$image_file); 
    break; 
    case 'image/gif': 
     imagegif($thumb, $destination.$image_file); 
    break; 
} 


} 

} 
} 
?> 

dans cet exemple, si je mets une image de (533px * 300px), il est déformé, enveloppé « désolé pour mon anglais =) », s'il vous plaît je besoin d'aide à ce sujet. Je serais vraiment satisfait si vous trouvez la solution.

Merci, Matias.

Répondre

1

Cette id dilli.

Sur la ligne 46, vous avez donné plus d'espaces, vous devez donc supprimer ces espaces indésirables dans cette ligne.

+0

L'espace blanc est-il important? –

0

Oui. Habituellement, un seul espace sera là même si nous avons donné plus d'un espace. Mais ici, des espaces comme multiple de "& nbsp" sont présents.

syntaxe incorrecte: imagecopyresampled (thumb $, $ source, 0, 0, $ source_pos [0], source_pos $ [1], new_size de $ [0],                                                       new_size $ [1], source_size de $ [0], source_size de $ [1]);

Syntaxe correcte: imagecopyresampled ($ thumb, $ source, 0, 0, $ source_pos [0], $ source_pos [1], $ new_size [0], $ new_size [1], $ source_size [0], $ source_size [1]);