2009-10-07 8 views
7

Je crée des vignettes de hauteur fixe et la largeur de mon script PHP en utilisant la fonction suivanteimage redimensionner problème en PHP - GD crée des images redimensionnées laid

/*creates thumbnail of required dimensions*/ 
function createThumbnailofSize($sourcefilepath,$destdir,$reqwidth,$reqheight,$aspectratio=false) 
{ 
    /* 
    * $sourcefilepath = absolute source file path of jpeg 
    * $destdir = absolute path of destination directory of thumbnail ending with "/" 
    */ 
    $thumbWidth = $reqwidth; /*pixels*/ 
    $filename = split("[/\\]",$sourcefilepath); 
    $filename = $filename[count($filename)-1]; 
    $thumbnail_path = $destdir.$filename; 
    $image_file = $sourcefilepath; 

    $img = imagecreatefromjpeg($image_file); 
    $width = imagesx($img); 
    $height = imagesy($img); 

    // calculate thumbnail size 
    $new_width = $thumbWidth; 
    if($aspectratio==true) 
    { 
     $new_height = floor($height * ($thumbWidth/$width)); 
    } 
    else 
    { 
     $new_height = $reqheight; 
    } 

    // create a new temporary image 
    $tmp_img = imagecreatetruecolor($new_width, $new_height); 

    // copy and resize old image into new image 
    imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

    // save thumbnail into a file 

    $returnvalue = imagejpeg($tmp_img,$thumbnail_path); 
    imagedestroy($img); 
    return $returnvalue; 
} 

et j'appeler cette fonction avec les paramètres suivants

createThumbnailofSize($sourcefilepath,$destdir,48,48,false); 

mais le problème est que l'image résultante est de très mauvaise qualité, quand j'effectue la même opération avec Adobe Photo Shop, il effectue une bonne conversion .. pourquoi c'est ainsi? Je suis incapable de trouver aucun paramètre de qualité, à travers lequel je change la qualité de l'image de sortie ..

Répondre

25
+2

imagecopyresampled() utilise l'algorithme de redimensionnement bi-cubique – Jacco

+0

Merci beaucoup, laissez-moi essayer cette fonction –

+2

Autre point important: Si certaines miniatures sont totalement noires. Le problème peut provenir de certaines caméras et téléphones cellulaires qui ajoutent des caractères supplémentaires. Pour éviter ce problème, ajoutez ceci: 'ini_set (" gd.jpeg_ignore_warning ", 1);'. Ensuite, vous n'obtiendrez que cet avertissement 'Données JPEG corrompues: 2 octets étrangers avant le marqueur 0xd9' mais la vignette sera correctement générée. – Toto

1

si elle est la qualité de l'image que vous êtes après que vous devez donner le paramètre de qualité lorsque vous enregistrez l'image en utilisant imagejpeg (tmp_img $, thumbnail_path de $, 100) // valeur par défaut est 75

/*creates thumbnail of required dimensions*/ 
function 
createThumbnailofSize($sourcefilepath,$destdir,$reqwidth,$reqheight,$aspectratio=false) 
{ 
    /* 
    * $sourcefilepath = absolute source file path of jpeg 
    * $destdir = absolute path of destination directory of thumbnail ending with "/" 
    */ 
    $thumbWidth = $reqwidth; /*pixels*/ 
    $filename = split("[/\\]",$sourcefilepath); 
    $filename = $filename[count($filename)-1]; 
    $thumbnail_path = $destdir.$filename; 
    $image_file = $sourcefilepath; 

$img = imagecreatefromjpeg($image_file); 
$width = imagesx($img); 
$height = imagesy($img); 

// calculate thumbnail size 
$new_width = $thumbWidth; 
if($aspectratio==true) 
{ 
    $new_height = floor($height * ($thumbWidth/$width)); 
} 
else 
{ 
    $new_height = $reqheight; 
} 

// create a new temporary image 
$tmp_img = imagecreatetruecolor($new_width, $new_height); 

// copy and resize old image into new image 
imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

// save thumbnail into a file 

$returnvalue = imagejpeg($tmp_img,$thumbnail_path,100); 
imagedestroy($img); 
return $returnvalue; 

}

+0

L'augmentation du paramètre Qualité n'aide pas. resample améliore la qualité – rjha94

1

Vous pouvez également utiliser ImageMagick (http://us3.php.net/manual/en/book.imagick.php) au lieu de Gd. J'ai eu le même problème il y a quelques jours avec Java. Aller à ImageMagick au lieu de Java Advanced Images résultat dans un énorme différence de qualité.

0

Vous pouvez également jeter un oeil à la Image_Transform PEAR package. Il prend soin de beaucoup de détails de bas niveau pour vous et rend la création et la manipulation d'images indolore. Il vous permet également d'utiliser des bibliothèques GD ou ImageMagick. Je l'ai utilisé avec beaucoup de succès sur plusieurs projets.

0

a essayé d'utiliser le php.Thumbnailer?

$thumb=new Thumbnailer("photo.jpg"); 
$thumb->thumbSquare(48)->save("thumb.jpg"); 

La photo de résultat sera 48x48px. Facile à droite? :)

+0

Pensez que le lien est cassé –

Questions connexes