2009-09-30 6 views
1

ici est le site im parler de http://makeupbyarpi.com/portfolio.phpphp gd: quand je rogner des images par php quelques images sortent smushed

vous remarquerez quelques-unes des images sont smushed sens de la largeur.

le code i utilisé est la suivante:

$width="500"; 
$height="636"; 


$img_src = $_FILES['galleryimg']['tmp_name']; 
$thumb = "../gallery/".rand(0,100000).".jpg"; 


//Create image stream 
$image = imagecreatefromjpeg($img_src); 

//Gather and store the width and height 
list($image_width, $image_height) = getimagesize($img_src); 


//Resample/resize the image 
$tmp_img = imagecreatetruecolor($width, $height); 
imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height); 

//Attempt to save the new thumbnail 
if(is_writeable(dirname($thumb))){ 
    imagejpeg($tmp_img, $thumb, 100); 

} 

//Free memory 
imagedestroy($tmp_img); 
imagedestroy($image); 

les images qui se téléchargés sont énormes parfois 3000px par 2000px et j'ai culture php vers le bas à 500 x 536 et quelques images à base de paysage se smushed. Y at-il une formule que je peux utiliser pour le recadrer avec soin afin que l'image soit bonne?

grâce

Répondre

2

Vous pouvez redimensionner et ajouter un letterbox si nécessaire. Vous devez simplement redimensionner la largeur et ensuite calculer la nouvelle hauteur (en supposant que le rapport largeur/hauteur est identique à l'original). Si la hauteur n'est pas égale à la hauteur préférée, vous devez dessiner un rectangle noir (fond de couverture). image.

Vous pouvez également faire un pillarbox, mais ensuite vous faites exactement la même chose que ci-dessus, sauf que la largeur devient la hauteur et la hauteur devient la largeur.

Modifier: En fait, vous redimensionnez celui qui est le plus grand, si la largeur est plus grande, vous redimensionnez cela et si la hauteur est plus grande alors vous redimensionnez cela. Et en fonction de celui que vous redimensionnez, votre script doit être letterbox ou pillarbox.

EDIT 2:

<?php 
    // Define image to resize 
    $img_src = $_FILES['galleryimg']['tmp_name']; 
    $thumb = "../gallery/" . rand(0,100000) . ".jpg"; 

    // Define resize width and height 
    $width = 500; 
    $height = 636; 

    // Open image 
    $img = imagecreatefromjpeg($img_src); 

    // Store image width and height 
    list($img_width, $img_height) = getimagesize($img_src); 

    // Create the new image 
    $new_img = imagecreatetruecolor($width, $height); 

    // Calculate stuff and resize image accordingly 
    if (($width/$img_width) < ($height/$img_height)) { 
     $new_width = $width; 
     $new_height = ($width/$img_width) * $img_height; 
     $new_x = 0; 
     $new_y = ($height - $new_height)/2; 
    } else { 
     $new_width = ($height/$img_height) * $img_width; 
     $new_height = $height; 
     $new_x = ($width - $new_width)/2; 
     $new_y = 0; 
    } 

    imagecopyresampled($new_img, $img, $new_x, $new_y, 0, 0, $new_width, $new_height, $img_width, $img_height); 

    // Save thumbnail 
    if (is_writeable(dirname($thumb))) { 
     imagejpeg($new_img, $thumb, 100); 
    } 

    // Free up resources 
    imagedestroy($new_img); 
    imagedestroy($img); 
?> 

Désolé il a fallu un certain temps, je suis tombé sur un petit bug dans la partie de calcul que je ne pouvais fixer pour comme 10 minutes =/Cela devrait fonctionner.

+0

donc si la largeur est plus grande que la hauteur dans ce cas je définir la largeur à 500 et laisser la hauteur? – iaddesign

+0

Donnez-moi 5 minutes Je vais écrire un exemple. –

+0

wow c'est plutôt bien. Merci beaucoup! Vous n'avez pas à m'excuser pour cela prendre longtemps vous m'a fait une grande faveur. Je souhaite que je peux vos points :) – iaddesign

Questions connexes