2010-05-30 4 views
1

je suis venu avec ceci:On-the-fly miniatures PHP

<?php 

$dir = $_GET['dir']; 

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, 150, 150); 

imagejpeg($create, null, 100); 

?> 

Il fonctionne en accédant à:

http://domain.com/image.php?dir=thisistheimage.jpg

Ce qui fonctionne très bien ... mais la sortie est horrible:

alt text http://i47.tinypic.com/119s47a.jpg

Quelqu'un peut-il fixer mon code pour que l'image soit de 150 x 150 couvrant la zone noire ...

Merci.

SOLUTION:

<?php 

$dir = $_GET['dir']; 

header('Content-type: image/jpeg'); 

list($width, $height) = getimagesize($dir); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 

$newwidth = 150; 
$newheight = 150; 

imagecopyresized($create, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

imagejpeg($create, null, 100); 

?> 
+0

Vous pouvez également utiliser .htaccess pour réécrire l'URL et ont des chemins comme: http://domain.com/imagephp/thisistheimage.jpg –

+0

Vous devez enregistrer une copie de l'image redimensionnée avec les paramètres largeur/hauteur de le nom de fichier et vérifiez s'il existe avant de traiter et de servir celui-là de sorte que vous gardez la charge sur le serveur. Utilisez également imagedestroy ($ create) après imagejpeg() pour libérer de la mémoire. – stagas

Répondre

6

Utilisation imagecopyresized:

$newwidth = 150; 
$newheight = 150; 
imagecopyresized($create, $image, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight); 
+0

Quelles sont les définitions de $ oldwidth et $ oldheight? – MacMac

+0

tout ce qu'ils sont pour votre image ... –

+0

Ah oui bien sûr, triés maintenant, ajouté la solution dans l'article édité :) – MacMac

1

Les 2 derniers 150 doit être la largeur d'origine et la hauteur de l'image en taille.

+0

Mieux vaut gauche comme un commentaire. Ce n'est pas une réponse. – stagas

+3

C'était une réponse parfaitement correcte à la question ORIGINALE non modifiée. – CharlesLeaf

+0

Désolé, j'essaie d'annuler le vote négatif, mais il dit qu'il est verrouillé. Pourtant, c'est une réponse paresseuse, vous devriez probablement le supprimer. – stagas

1

Comme d'autres l'ont suggéré, les deux derniers paramètres doivent être la taille originale de l'image.

Si $ dir est votre nom de fichier, vous pouvez utiliser getimagesize pour obtenir les dimensions originales de l'image.

Vous pouvez utiliser imagecopyresized ou imagecopyresampled. La différence est que l'image recopiée sera copiée et redimensionnée tandis que l'image recopiée rééchantillonnera également votre image, ce qui donnera une meilleure qualité.

<?php 

$dir = $_GET['dir']; 

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 
list($width, $height) = getimagesize($dir); 
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height); 

imagejpeg($create, null, 100); 

?> 
Questions connexes