2013-03-08 4 views
2

Je tente de créer des miniatures de photos en utilisant la bibliothèque GD de PHP.Bibliothèque PHP GD redimensionner la photo

Voici les étapes que je suis en train de suivre.

  1. Créer une ressource d'image GD.
  2. Obtenez la hauteur et la largeur de l'image
  3. créer une ressource d'image GD vide à 100 pixels de haut par largeur appropriée
  4. copie image une ressource à l'image GD vide et enregistrer les images

Voici mon code :

private function getExtension($filename) { 
    $position=strrpos($filename, '.'); 
    $extension = strtolower(substr($filename, $position+1)); 
    if ($extension == "jpg") { 
     $extension = "jpeg"; 
    } 

    return $extension; 
} 

public function saveImage($parameters) { 
    $extension=$this->getExtension($parameters['filename']); 
    $createImageFunc="imagecreatefrom".$extension; 
    $imgResource=$createImageFunc(SITE_PATH."tmp/{$parameters['filename']}"); 
    $width=imagesx($imgResource); 
    $height=imagesy($imgResource); 
    $ratio=$height/$width; 
    $thumbnail=imagecreatetruecolor(100, 100*$ratio); 

    imagecopyresized($thumbnail, $imgResource, 0, 0, 0, 0, 100*$ratio, 100, $width, $height); 

    $imgResult=imagejpeg($imgResource, SITE_PATH."images/{$parameters['galleryName']}/{$parameters['filename']}"); 
    $thumbResult=imagejpeg($thumbnail, SITE_PATH."images/{$parameters['galleryName']}/thumbnails/{$parameters['filename']}"); 

} 

les images économisent, mais la copie ne fonctionne pas, il est vide espace noir dans l'image miniature.

Ceci est l'image originale: enter image description here

C'est l'image enregistrée à nouveau avec GD: enter image description here

C'est la miniature: enter image description here

J'ai vérifié comme quadruple imagecopyresize et D'après ce que je comprends, toutes les valeurs du code devraient être correctes.

Voici ce que php.net a pour les valeurs:

bool imagecopyresized (resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h) 

Toute personne a des idées?

+0

vérifiez la largeur de votre destination en copie – Poonam

Répondre

0

Jetez un oeil à ceci: PHP/GD Imagestyle
Vous pouvez facilement créer des vignettes ou tout ce que vous voulez

// create a thumbnail 
$thumb = imagestyle($image,'autosize:100 100'); 
// resize the image # resize:200 0; means width=200 height=auto 
$resized = imagestyle($image,'resize:200 0;'); 
// crop it # left=0, top=50, width=200, height=200 
$cropped = imagestyle($image,'crop:0 50 200 200;'); 
// and more 
0

Travailler avec PHP/GD peut être fastidieux, j'ai donc écrit une bibliothèque pour rendre les choses beaucoup plus facile: SimpleImage

Avec SimpleImage, vous pouvez créer une miniature en deux lignes simples:

// Load image from image.jpg 
$image = new \claviska\SimpleImage('image.jpg'); 

// Create a 100x100 thumbnail, convert to PNG, and save to thumb.png 
$image->thumbnail(100, 100)->toFile('thumb.png', 'image/png'); 

Si vous êtes toujours déterminé à le faire manuellement, vérifiez vos paramètres imagecopyresized. Pourquoi la largeur est-elle multipliée par $ratio?

Questions connexes