La réduction de la taille des avatars des utilisateurs? - la création de vignettes
-
18-09-2019 - |
Question
utilisateur de mon site télécharger des images qui sont utilisées comme avatars. Je définir une taille limite de téléchargement de 2 MB. Dans la plupart des endroits que je ne nécessitent que des vignettes. Mais aux utilisateurs de télécharger des images avec des résolutions bien plus importantes. Je stocke ces fichiers sur mon système de fichiers.
Comment puis-je créer des vignettes et les stocker au lieu de gros fichiers de taille?
La solution
En fonction de votre configuration d'installation / serveur, vous avez plusieurs possibilités.
- Vous pouvez utiliser le bibliothèque GD , et quelque chose comme son
imagecopyresized
fonction - Ou vous pouvez utiliser le
Imagick extension
, et quelque chose comme sonthumbnailImage
.
Je dirais que je suis tout à fait jamais vu un serveur sans GD installé - pour Imagick, son moins susceptible d'être installé par défaut: - (
Une autre solution pourrait être d'appeler le convertir utilitaire de ligne de commande (il vient avec ImageMagick - de toute extension indépendamment de PHP) , en utilisant quelque chose comme exec
pour l'appeler.
Avantage, avec cela, serait que vous ne seriez pas limité par memory_limit
, comme le redimensionnement serait effectué par un outil externe - mais, bien sûr, cela signifie aussi que votre application reposera sur un outil externe, qui n'est pas toujours agréable ...
Si nécessaire, il y a beaucoup de tutoriels sur GD; par exemple, ceux qui pourraient vous intéresser:
- Comment créer des vignettes avec PHP et GD : il utilise un processus de traitement par lots pour générer vignettes pour de nombreuses images - qui pourraient être utiles si vous devez générer des vignettes pour toutes les images que vous avez déjà
- génération Miniature avec tutoriel PHP :. ne des choses pas souvent vu, comme créer des vignettes carrées, en centrant l'image Orignal et en ajoutant une couleur de fond
Autres conseils
Vous pouvez utiliser le GD Module ou Module ImageMagick pour redimensionner et rétractable quelconque téléchargé images.
Si vous google autour de quelque chose comme « image PHP Resizer », vous trouverez beaucoup d'exemples. J'ai tendance à utiliser GD, comme je l'ai un vieux morceau de code coups de pied autour qui fonctionne très bien. En supposant que vous avez une image jpeg Uploaded connue trouvé à $srcImgPath
, vous pouvez faire quelque chose comme ce qui suit, où $newWidth
et $newHeight
sont les nouvelles dimensions de l'image que vous voulez:
list($width, $height, $type) = getimagesize($srcImgPath);
$srcImg = imagecreatefromjpeg($srcImgPath);
if ($srcImg === false) return false;
$workImg = imagecreatetruecolor($newWidth,$newHeight);
imagecopyresampled($workImg,$srcImg,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($workImg,$newFilename,$quality);
fonctionnaliser selon le cas, et assurez-vous de spécifier le $quality
. Vous pouvez abstrait ce code à gérer gifs et PNGs très facilement ainsi.
Consultez la bibliothèque GD, en particulier la imagecopyresized fonction
Juste un petit mot, si vous descendez la route GD, utilisez imagecopyresampled, car il produit des images à la recherche propre. Je veux dire qu'il ne sera pas aussi granuleuse et / ou pixely.
Lien vers le manuel PHP sur la fonction: http: // US2. php.net/manual/en/function.imagecopyresampled.php
Je recommanderai le script timthumb.php. il est solide comme le roc. http://www.darrenhoyt.com/2008/04 / 02 / / publié timthumb-php-script
Si vous avez Imagick installé dans votre configuration PHP. Ensuite, il y a une fonction qui fait cela. Imagick :: thumbnailImage ()
Si vous n'avez pas Imagick, la bibliothèque GD sera utile. Depuis qu'ils ont imagcopyresized ()
est-ce pas Google AppEngine équipé d'un sous-ensemble de PIL? Il y a la fonction « Redimensionner » qui pourrait être utilisé ... et le meilleur de tous, vous obtenez un quota gratuit!