PHP Vignette de Redimensionnement d'Image avec des proportions
Comme une brève course vers le bas, je suis en train d'effectuer une datation type de site. Les utilisateurs peuvent créer un compte et de télécharger des photos de profil (jusqu'à 8). Afin de les afficher dans la zone parcourir le site, je suis à la recherche d'un moyen en PHP (avec un tiers processeur/scripts) pour redimensionner toutes les images téléchargées à avoir des vignettes qui adhèrent à certaines dimensions.
Comme un exemple, je veux "profil" des images (vignettes) à PAS plus de 120*150 px. Les besoins en script pour redimensionner les images téléchargées (indépendamment du fait qu'ils sont en mode portrait ou paysage, et indépendamment des proportions) à adhérer à ces dimensions, sans se tendu.
La largeur (par exemple. 120pixels) doit toujours rester le même, mais la hauteur (par exemple. 150px) peut varier afin de garder l'image en proportion. Si c'est une photo de paysage, je suis en supposant que le script aurait besoin de prendre un morceau du milieu de l'image?
La raison que toutes les images soient redimensionnées en est ainsi que lorsque les profils sont afficher dans une grille que toutes les vignettes sont à peu près de la même taille.
Toute entrée serait grandement apprécié.
OriginalL'auteur Sam | 2011-01-04
Vous devez vous connecter pour publier un commentaire.
Cela permettra de réduire les images vers le bas de façon proportionnelle sur le côté est plus long (largeur ou hauteur), à la taille maximale. Il permettra également de faire sauter toute les images plus petites que max, vous pouvez l'arrêter avec un peu de vérifier si oui ou non à la fois la largeur et la hauteur sont inférieurs à son max. Donc, un 200x300 image sera rétrécie à 100x150, et un 300x200 image sera rétrécie à 120x80.
Hmm, vous souhaitez que la largeur de toujours être de 120, de sorte qu'il serait de changer un peu, et oui, il faut couper quelque chose dans le cas d'une image comme 200x300, parce que ce serait le réduire à 120x180, sans aucune distorsion, ou il aurait à réduire la portée et de la boîte aux lettres, mais qui devrait vous aider à démarrer bien.
Letterbox dans cet exemple, serait seulement l'affaire de déterminer quel est le x et y pour démarrer le dessin de la nouvelle image serait dans le imagecopyresized() fonction. Dans le cas de quelque chose comme 100x150, le X peut être de 10, je pense que, donc, il serait 10px d'espace de chaque côté pour 120x150 à la fin. Les bandes noires 120x80 X est 0, mais Y aurait 35, donc il n'y aurait 35px de l'espace vide au-dessus et au-dessous pour 120x150.
Vous voulez également faire $newimg avec $maxwidth,$maxheight plutôt que $newwidth,$newheight, mais le imagecopyresized() toujours utiliser les deux $de nouvelles valeurs.
Comme je m'ennuie et n'ont rien d'autre à faire, ces modifications permettraient de le faire:
Qui devrait fonctionner, n'est-ce pas encore essayé.
OriginalL'auteur Phoenix
GD ou Imagick fonctions sont ce dont vous avez besoin en fonction de votre configuration de PHP.
Désolé, je suis un débutant je ne peux pas poster deux liens dans le même message 🙁
Bon à savoir, merci. +1
OriginalL'auteur Nabab
J'ai récemment eu besoin de php redimensionnement (vignette) de la solution et trouvé Zebra_Image bibliothèque, qui est une légère manipulation de l'image de la bibliothèque écrite en PHP. Le code est très propre et il est également facile à utiliser. Je recommande fortement l'utilisation de cette bibliothèque. L'exemple de code est juste assez pour vous obtenir a commencé.
Être assurez-vous que vous avez assez de mémoire limite fixée en php.fichier ini pour manipuler les images qui ont relativement importante de la résolution de (e.g 2560x1600). J'ai eu une erreur avec de grandes images et il n'y a pas eu d'erreur à l'impression. J'ai réglé le problème à
imagecreatefrom{gif,jpeg,png}
appels enfunction _create_from_source
dans les lignes 1262, 1279, et 1288. Les appels ont été silented avec @ donc je ne pouvais pas avoir un changement à l'erreur. J'ai enlevé @ lignes et a vu une erreur PHP que de la mémoire limite a été dépassée. L'original de la mémoire limite a été fixée à 32 mo et j'ai augmenté à 64 MO. Maintenant, je peux manipuler à 2560 x 1600 et je refuse de manipuler les images qui sont plus grandes.Ci-dessous est le code d'exemple pour le contrôle de la résolution de l'image.
(Note: j'utilise Zèbre Image de la version 2.2.2)
OriginalL'auteur Eren T.
Vous pouvez faire cela avec ImageMagick:
Cela va avec une commande shell, donc en PHP que vous souhaitez utiliser
shell_exec()
pour exécuter la commande ci-dessus. Je ne pense pas que vous avez besoin d'une extension PHP.Quelques drapeaux peuvent être trouvés dans la ImageMagick documentation pour le contrôle de l'opération de redimensionnement. Si je me souviens bien, le
x200
avant le numéro de moyens "échelle avec le même rapport d'aspect de 200px".J'ai écrit un guide d'installation de ImageMagick (et ghostscript): Comment faire pour installer, tester, convertir, redimensionner PDF à l'aide d'ImageMagick, Ghostscript, Windows Vista/Windows 7 x64 basé sur mon gaffe autour, peut-être que cela peut vous aider.
L'autre option est la bibliothèque GD (détaillées au dqhendricks réponse). C'est plus rapide et apparemment mieux documenté, utilisé pour les opérations de base.
OriginalL'auteur Ben
vous n'avez pas besoin imagick. voici un lien qui vous mènera à une fonction qui va redimensionner une image à l'aide de PHP GD pour toute taille arbitraire. la fonction a des options pour l'utilisation des bandes noires ou de la culture d'ajustement des méthodes pour redimensionner le nouveau ratio d'aspect. la fonction est également expliqué à fond. check it out.
http://www.spotlesswebdesign.com/blog.php?id=1
si c'est ce que vous cherchez, veuillez cochez la case à côté de cette réponse. merci!
OriginalL'auteur dqhendricks
Dit imagic plus vite, j'utilise prochaine
OriginalL'auteur Dmitry Zalivadny