2011-07-18 6 views
1

Je voudrais convertir du code PHP utilisant ImageMagick pour le traitement d'image. Je suis un débutant total quand il s'agit d'utiliser GD mais j'espère que je pourrais obtenir des directions ou des suggestions de code.Conversion du code ImageMagick en GD (php)

Le code PHP en cours peut être vu ci-dessous

$rand = rand(); 
$galleryWidth ='245'; 
$galleryHeight ='245'; 

$result = array(); 

if (isset($_FILES['photoupload'])) 
{ 
    $file = $_FILES['photoupload']['tmp_name']; 
    $error = false; 
    $size = false; 



     list($file_name, $file_type) = split('[.]', $_FILES["photoupload"]["name"]); 

     move_uploaded_file($_FILES["photoupload"]["tmp_name"], 
     "./photos/org/".$rand.'.'.$file_type); 

     list($width,$height)=getimagesize('./photos/org/'. $rand.'.'.$file_type); 


     if(($galleryWidth/$width) < ($galleryHeight/$height)){ 
     exec("C:/imagemagick/convert ./photos/org/". $rand.".".$file_type."\ 
      -thumbnail ".round(($width*($galleryWidth/$width)), 0)."x".round(($height*($galleryWidth/$width)), 0)." \ 
      -quality 90 ./photos/".$_GET['id'].".jpg"); 
     } 
     else{ 
     exec("C:/imagemagick/convert ./photos/org/". $rand.".".$file_type."\ 
      -thumbnail ".round(($width*($galleryHeight/$height)), 0)."x".round(($height*($galleryHeight/$height)), 0)." \ 
      -quality 90 ./photos/".$_GET['id'].".jpg"); 
     } 
     $result['result'] = 'success'; 
     $result['size'] = "Uploaded an image ({$size['mime']}) with {$size[0]}px/{$size[1]}px."; 

} 
?> 

Merci d'avoir un coup d'oeil!

+0

Il n'existe pas de technique de 'conversion' universelle. S'il vous plaît dites-nous ce que vous essayez d'atteindre. C'est difficile à comprendre à partir de votre code. – Hnatt

+0

Je suis désolé. Fondamentalement, c'est le code PHP pour un formulaire de téléchargement d'image. Pour le redimensionnement et la diminution de la qualité d'image, j'ai besoin d'ImageMagick. "-thumbnail" et "-quality" ne sont pas du code PHP, c'est du code ImageMagick. D'après ce que je comprends, GD a des caractéristiques similaires mais une syntaxe différente. La chose la plus importante est de créer la vignette afin qu'elle ait des proportions correctes. – jman

+0

Toute raison pour laquelle vous souhaitez revenir à GD? Je vous suggère de passer à [extension php native de Imagick] (http://www.php.net/manual/fr/book.imagick.php), au lieu de faire ce hackery 'exec()'. vous obtenez les mêmes fonctionnalités mais le code sera cross plate-forme et nettoyeur. – CuriousMind

Répondre

2

Vous constaterez que la prise en charge du format de fichier GD est un peu limitée par rapport à ImageMagick, mais vous recherchez quelque chose de similaire à ce qui suit.

$inputPath = "./photos/org/{$rand}.{$file_type}"; 
$outputPath = "./photos/{$imageId}.jpg"; 

list($old_width, $old_height) = getimagesize($inputPath); 

// -- Calculate the new_width and new_height here, however you want to. 
$new_width = 250; 
$new_height = 250; 

// -- Initialise the source image container 
if($file_type == 'png') 
    $src_img = imagecreatefrompng($inputPath); 
else if($file_type == 'jpeg' || $file_type == 'jpg') 
    $src_img = imagecreatefromjpeg($inputPath); 
else 
    throw new Exception("Unsupported file format."); 

// -- Prepare the new image container 
$dst_img = ImageCreateTrueColor($new_width, $new_height); 

// -- Resample the "old" image to the "new" image 
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height); 

// -- Save the new canvas (the 90 represents the quality percentage) 
imagejpeg($dst_img, $outputPath, 90); 

// -- Perform cleanup on image containers. 
imagedestroy($dst_img); 
imagedestroy($src_img); 
+0

Yup. @nctrnl, vos appels d'ImageMagick ne font qu'étaler l'image à une plus petite taille, donc 'imagecopyresampled' est certainement le La fonction de GD qui vient à l'esprit.Si vous avez des exigences de vignette d'image plus compliquées à l'avenir, peut-être regarder dans la [bibliothèque TimThumb PHP] (http://www.binarymoon.co.uk/projects/timthumb/) –

+0

cette erreur lors de la tentative de téléchargement d'un fichier jpg: Attention: getimagesize (./photos/org/1713.) [function.getimagesize]: impossible d'ouvrir le flux: aucun fichier ou répertoire de ce type dans C: \ xxx \ xxx \ xxx \ xxx \ xxx \ employees \ upload_foto.php on line 6 Erreur fatale: Exception non interceptée 'Exception' avec le message 'Format de fichier non pris en charge' dans C: \ xxx \ xxx \ xxx \ xxx \ xxx \ employees \ upload_foto.php: 18 Trace de pile: # 0 {main} jeté dans C: \ xxx \ xxx \ xxx \ xxx \ xxx \ employees \ upload_foto.php sur la ligne 18 – jman

+0

@nctrnl Par le son, parce que votre '$ inputPath' n'est pas défini sur le chemin de l'image comme il arrive. Corrigez cela, et vous devriez voir cette erreur disparaître. –