2011-06-27 3 views
4

Je veux créer un très basique télécharger, redimensionner, et recadrer le script PHP. La fonctionnalité à ceci sera identique (la dernière fois que j'ai vérifié de toute façon) à la méthode que Twitter utilise pour télécharger des images d'avatar. Je veux que le script prenne n'importe quelle taille d'image, redimensionne le côté le plus court à 116px, puis recadre le haut et le bas (ou le côté gauche et droit si c'est le paysage) pour obtenir un carré 116px par 116px.Télécharger, redimensionner, et recadrer le centre de l'image avec PHP

Je ne veux pas un script PHP gonflé avec le redimensionnement côté client ou quoi que ce soit, juste un simple redimensionnement PHP et recadrer. Comment cela est-il fait?

+0

http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php – Frankie

+1

qu'avez-vous fait, à ce jour? un script? – ariefbayu

+0

Je ne l'ai pas commencé avec ce projet précis, mais j'essayais de le faire sur des projets passés et je ne pouvais pas le comprendre. J'espérais que quelqu'un connaîtrait un code de base pour me lancer. – Adam

Répondre

2

Si vous voulez un exemple de travailler de mon télécharger, redimensionner et la classe des cultures fait tout cela, plus quelques autres trucs cool - vous pouvez l'utiliser tout si nécessaire ou tout simplement prendre les bits que vous aimez :

http://www.mjdigital.co.uk/blog/php-upload-and-resize-image-class/

Je ne pense pas que ce soit trop lourd! - vous pouvez juste faire quelque chose ce (non testé):

 
if((isset($_FILES['file']['error']))&&($_FILES['file']['error']==0)){ // if a file has been posted then upload it 
    include('INCLUDE_CLASS_FILE_HERE.php'); 
    $myImage = new _image; 
    // upload image 
    $myImage->uploadTo = 'uploads/'; // SET UPLOAD FOLDER HERE 
    $myImage->returnType = 'array'; // RETURN ARRAY OF IMAGE DETAILS 
    $img = $myImage->upload($_FILES['file']); 
    if($img) { 
     $myImage->newWidth = 116; 
     $myImage->newHeight = 116; 
     $i = $myImage->resize(); // resizes to 116px keeping aspect ratio 
     // get new image height 
     $imgWidth = $i['width']; 
     // get new image width 
     $imgHeight = $i['height']; 
     if($i) { 
      // work out where to crop it 
      $cropX = ($imgWidth>116) ? (($imgWidth-116)/2) : 0; 
      $cropY = ($imgHeight>116) ? (($imgHeight-116)/2) : 0; 
      $cropped = $myImage->crop(116,116,$cropX,$cropY); 
      if($cropped) { echo 'It Worked (I think!)'; print_r($cropped); 
      } else { echo 'Crop failed'; } 
     } else { echo 'Resize failed'; } 
    } else { echo 'Upload failed'; } 
+0

wow c'est très simple, beaucoup plus simple que celui que j'ai trouvé! – Adam

+0

Merci - bien que j'ai réalisé dans mon message original, j'ai laissé de côté les deux derniers paramètres de la méthode de culture - D'oh! Je l'ai corrigé ci-dessus maintenant si tout va bien il devrait être OK - juste au cas où vous auriez besoin de la méthode de recadrage en utilisant: $ myImage-> crop ($ cropToWidth, $ cropToHeight, $ cropFromX, $ cropFromY); – mj7

4

Il simple à utiliser, bibliothèque open source appelée PHP Image Magician. Il utilise GD mais simplifie son utilisation à 3 lignes.

Exemple d'utilisation de base:

$magicianObj = new imageLib('racecar.jpg'); 
$magicianObj -> resizeImage(100, 200, 'crop'); 
$magicianObj -> saveImage('racecar_small.png'); 
+0

Le meilleur de loin. Beaucoup de fonctionnalités très faciles à utiliser. Je vous remercie!! – MazarD

0

J'ai fait cette fonction simple qui est très facile à utiliser, il vous permet de redimensionner, et centrez une image à une largeur et la hauteur, il peut suppert JPGs , PNG et GIF. Ne hésitez pas à copier et le coller dans votre code:

function resize_imagejpg($file, $w, $h, $finaldst) { 

    list($width, $height) = getimagesize($file); 
    $src = imagecreatefromjpeg($file); 
    $ir = $width/$height; 
    $fir = $w/$h; 
    if($ir >= $fir){ 
     $newheight = $h; 
     $newwidth = $w * ($width/$height); 
    } 
    else { 
     $newheight = $w/($width/$height); 
     $newwidth = $w; 
    } 
    $xcor = 0 - ($newwidth - $w)/2; 
    $ycor = 0 - ($newheight - $h)/2; 


    $dst = imagecreatetruecolor($w, $h); 
    imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight, 
    $width, $height); 
    imagejpeg($dst, $finaldst); 
    imagedestroy($dst); 
    return $file; 


} 






function resize_imagegif($file, $w, $h, $finaldst) { 

    list($width, $height) = getimagesize($file); 
    $src = imagecreatefromgif($file); 
    $ir = $width/$height; 
    $fir = $w/$h; 
    if($ir >= $fir){ 
     $newheight = $h; 
     $newwidth = $w * ($width/$height); 
    } 
    else { 
     $newheight = $w/($width/$height); 
     $newwidth = $w; 
    } 
    $xcor = 0 - ($newwidth - $w)/2; 
    $ycor = 0 - ($newheight - $h)/2; 


    $dst = imagecreatetruecolor($w, $h); 
    $background = imagecolorallocatealpha($dst, 0, 0, 0, 127); 
    imagecolortransparent($dst, $background); 
    imagealphablending($dst, false); 
    imagesavealpha($dst, true); 
    imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight, 
    $width, $height); 
    imagegif($dst, $finaldst); 
    imagedestroy($dst); 
    return $file; 


} 



function resize_imagepng($file, $w, $h, $finaldst) { 

    list($width, $height) = getimagesize($file); 
    $src = imagecreatefrompng($file); 
    $ir = $width/$height; 
    $fir = $w/$h; 
    if($ir >= $fir){ 
     $newheight = $h; 
     $newwidth = $w * ($width/$height); 
    } 
    else { 
     $newheight = $w/($width/$height); 
    $newwidth = $w; 
    } 
    $xcor = 0 - ($newwidth - $w)/2; 
    $ycor = 0 - ($newheight - $h)/2; 


    $dst = imagecreatetruecolor($w, $h); 
    $background = imagecolorallocate($dst, 0, 0, 0); 
    imagecolortransparent($dst, $background); 
    imagealphablending($dst, false); 
    imagesavealpha($dst, true); 

    imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, 
    $newheight,$width, $height); 

    imagepng($dst, $finaldst); 
    imagedestroy($dst); 
    return $file; 


} 








function ImageResize($file, $w, $h, $finaldst) { 
     $getsize = getimagesize($file); 
     $image_type = $getsize[2]; 

     if($image_type == IMAGETYPE_JPEG) { 

     resize_imagejpg($file, $w, $h, $finaldst); 
     } elseif($image_type == IMAGETYPE_GIF) { 

     resize_imagegif($file, $w, $h, $finaldst); 
     } elseif($image_type == IMAGETYPE_PNG) { 

     resize_imagepng($file, $w, $h, $finaldst); 
     } 





} 

Tout ce que vous devez faire pour l'utiliser est l'appeler comme ceci:

ImageResize(image, width, height, destination); 

Par ex

ImageResize("uploads/face.png", 100, 150, "images/user332profilepic.png"); 
Questions connexes