Maison >développement back-end >tutoriel php >Le redimensionnement d'image est facilité avec PHP

Le redimensionnement d'image est facilité avec PHP

Lisa Kudrow
Lisa Kudroworiginal
2025-03-01 10:23:09735parcourir

Image Resizing Made Easy With PHP

Vous avez toujours voulu une méthode polyvalente et facile à utiliser pour redimensionner vos images en PHP? Eh bien, c'est à cela que servent les classes PHP - des fonctionnalités réutilisables que nous appelons pour faire le sale boulot dans les coulisses. Nous allons apprendre à créer notre propre classe qui sera bien construite et extensible. 

Introduction

Pour vous donner un aperçu rapide de ce que nous essayons de réaliser avec notre classe, la classe doit être:

  • Facile à utiliser
  • Format indépendant: peut ouvrir, redimensionner et enregistrer un certain nombre de formats d'images différents
  • TUTORATION Intelligent: AUCUNE IMAGE DISTORME! classes et objets, et bien que cette compétence aide, elle n'est pas nécessaire pour suivre ce tutoriel.
  • Il y a beaucoup à couvrir - commence.

1. Préparation

La première étape est facile. Dans votre répertoire de travail, créez deux fichiers: l'un appelé

index.php

et l'autre redimensi-class.php

2. Appeler l'objet

pour vous donner une idée de ce que nous essayons de réaliser, nous commencerons par coder les appels que nous utiliserons pour redimensionner les images. Ouvrez votre fichier

index.php

et ajoutez le code suivant. Comme vous pouvez le voir, il y a une belle logique à ce que nous faisons. Nous ouvrons le fichier image et nous définissons les dimensions auxquelles nous voulons redimensionner l'image et le type de redimensionnement. Ensuite, nous enregistrons l'image, en choisissant le format d'image et la qualité que nous voulons. Enregistrez et fermez votre fichier

index.php

.

Dans le code ci-dessus, vous pouvez voir que nous ouvrons un fichier
// *** Include the class<br>include("resize-class.php");<br><br>// *** 1) Initialize / load image<br>$resizeObj = new resize('sample.jpg');<br><br>// *** 2) Resize image (options: exact, height, width, auto, crop)<br>$resizeObj -> resizeImage(150, 100, 'crop');<br><br>// *** 3) Save image<br>$resizeObj -> saveImage('sample-resized.gif', 100);<br>
jpg

mais enregistrer un gif . N'oubliez pas que c'est une question de flexibilité.

3. Créez le squelette de classe

C'est une programmation (OOP) orientée objet qui rend possible ce sentiment de facilité. Pensez à une classe comme un modèle; Vous pouvez encapsuler les données - un autre terme de jargon qui signifie vraiment cacher les données. Nous pouvons ensuite réutiliser cette classe encore et encore sans avoir besoin de réécrire l'un des code de redimensionnement - vous n'avez qu'à appeler les méthodes appropriées, tout comme nous l'avons fait à l'étape 2. Une fois que notre modèle a été créé, nous créons des instances de ce modèle, appelés objets.

Commençons à créer notre classe Resize. Ouvrez votre fichier

redimensi-class.php

. Vous trouverez ci-dessous une structure squelette de classe vraiment basique que j'ai nommée $ filename . Nous devons ouvrir le fichier transmis avec PHP (plus spécifiquement la bibliothèque PHP GD) afin que PHP puisse lire l'image. Nous le faisons avec la méthode personnalisée $ Image

en tant que variable privée en tapant privé

, vous limitez la portée de cette variable afin qu'elle ne puisse être accessible que par la classe. À partir de maintenant, nous pouvons passer un appel à notre image ouverte, connue sous le nom de ressource, que nous ferons plus tard lorsque nous redimensions.

Pendant que nous y sommes, stockons la hauteur et la largeur de l'image. J'ai le sentiment que ceux-ci seront utiles plus tard.

Vous devriez maintenant avoir ce qui suit.

// *** Include the class<br>include("resize-class.php");<br><br>// *** 1) Initialize / load image<br>$resizeObj = new resize('sample.jpg');<br><br>// *** 2) Resize image (options: exact, height, width, auto, crop)<br>$resizeObj -> resizeImage(150, 100, 'crop');<br><br>// *** 3) Save image<br>$resizeObj -> saveImage('sample-resized.gif', 100);<br>

Les méthodes Images () sont des fonctions intégrées qui font partie de la bibliothèque GD. Ils récupèrent respectivement la largeur et la hauteur de votre image.


5. Ouvrant l'image

Dans l'étape précédente, nous avons appelé la fonction de méthode personnalisée strrchr () dans PHP, qui renvoie une partie de la chaîne principale de la dernière occurrence du caractère spécifié jusqu'à sa fin. Par exemple, le nom de fichier papaya.jpg nous donnera .jpg , et le nom de fichier i.lily.papaya.jpg nous donnera également .jpg .

Après avoir déterminé l'extension, nous utilisons la fiche appropriée )

  • Largeur - Largeur d'exact sera réglée, la hauteur sera ajustée en fonction du rapport d'aspect. (Hauteur )
  • Options de déterminance automatique 2 et 3. Si vous passez à travers un dossier avec des photos de différentes tailles, laissez le script déterminer comment gérer cela. (Crop )

  • 7. Redimensionnement. Faisons-le!

    Il y a deux parties à la méthode de redimensionnement. Le premier consiste à obtenir la largeur et la hauteur optimales de notre nouvelle image en créant certaines méthodes personnalisées - et bien sûr en transmettant notre option de redimensionnement comme décrit ci-dessus. La largeur et la hauteur sont retournées sous forme de tableau et définies sur leurs variables respectives. N'hésitez pas à passer par référence, mais je ne suis pas un grand fan de cela.

    La deuxième partie est ce qui exécute le redimensionnement réel. Nous utiliserons deux fonctions PHP intégrées pour notre redimensionnement. Ils sont:

    • ImageCopyResampled

    Je vous recommande de les lire dans la documentation.

    En bref, l'imagecopyResampled () est utilisée pour copier et redimensionner la partie d'une image avec une image. Autres variables de classe.

    La redimensionnement est effectuée par un module PHP appelé bibliothèque GD. De nombreuses méthodes que nous utilisons sont fournies par cette bibliothèque.

    Dans l'extrait de code ci-dessus, nous calculons les nouvelles dimensions de l'image et créons un véritable objet d'image couleur en conséquence. Cet objet d'image est ensuite passé à la hauteur

    ou auto
    		Class resize<br>		{<br>			// *** Class variables<br>			private $image;<br>			private $width;<br>			private $height;<br><br>			function __construct($fileName)<br>			{<br>			    // *** Open up the file<br>			    $this->image = $this->openImage($fileName);<br><br>			    // *** Get width and height<br>			    $this->width  = imagesx($this->image);<br>			    $this->height = imagesy($this->image);<br>			}<br>		}<br>
    , nous utilisons la largeur et la hauteur d'origine de l'image pour déterminer si l'image redimensionnée doit avoir une largeur ou une hauteur fixe. Pour les images dans l'orientation du paysage, nous gardons la largeur fixe. Pour les images dans l'orientation des portraits, nous gardons la hauteur fixe. Si l'image d'origine est un carré, nous choisissons la dimension fixe en utilisant la nouvelle largeur et la nouvelle valeur de hauteur.

    Le $ OptimalHeight

    et $ OptimalWidth <pre class="brush:php;toolbar:false">// *** Add to class variables&lt;br&gt;private $imageResized;&lt;br&gt;&lt;br&gt;public function resizeImage($newWidth, $newHeight, $option=&quot;auto&quot;)&lt;br&gt;{&lt;br&gt;&lt;br&gt; // *** Get optimal width and height - based on $option&lt;br&gt; $optionArray = $this-&gt;getDimensions($newWidth, $newHeight, strtolower($option));&lt;br&gt;&lt;br&gt; $optimalWidth = $optionArray['optimalWidth'];&lt;br&gt; $optimalHeight = $optionArray['optimalHeight'];&lt;br&gt;&lt;br&gt; // *** Resample - create image canvas of x, y size&lt;br&gt; $this-&gt;imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);&lt;br&gt; imagecopyresampled($this-&gt;imageResized, $this-&gt;image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this-&gt;width, $this-&gt;height);&lt;br&gt;&lt;br&gt; // *** if option is 'crop', then crop too&lt;br&gt; if ($option == 'crop') {&lt;br&gt; $this-&gt;crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);&lt;br&gt; }&lt;br&gt;}&lt;br&gt;</pre>, que nous utilisons pour le redimensionnement. La raison en est qu'au lieu de recadrer l'image directement à la largeur et à la hauteur spécifiées, notre classe cultive les images après le redimensionnement. <p></p> <p> Disons que les dimensions d'une image sont 1920W et 1080H, et que vous voulez la recadrer à 1200W et 200H. Comme vous pouvez le voir, le rapport de la largeur d'origine à la nouvelle largeur sera inférieur au rapport de hauteur correspondant. Par conséquent, l'image devra d'abord être redimensionnée de telle manière que sa largeur se résume à 1200 et que la hauteur change en conséquence. </p> <p> Le recadrage réel de l'image sera effectué une fois le redimensionnement terminé. </p> <hr> <h2> 10. Crop </h2> <p> Si vous avez opté pour une récolte - c'est-à-dire que vous avez utilisé l'option de récolte - vous avez ensuite un petit pas de plus. Nous allons recadrer l'image du centre. La culture est un processus très similaire à la redimensionnement, mais avec quelques paramètres de dimensionnement supplémentaires passés. </p> <pre class="brush:php;toolbar:false">// *** Include the class&lt;br&gt;include(&quot;resize-class.php&quot;);&lt;br&gt;&lt;br&gt;// *** 1) Initialize / load image&lt;br&gt;$resizeObj = new resize('sample.jpg');&lt;br&gt;&lt;br&gt;// *** 2) Resize image (options: exact, height, width, auto, crop)&lt;br&gt;$resizeObj -&gt; resizeImage(150, 100, 'crop');&lt;br&gt;&lt;br&gt;// *** 3) Save image&lt;br&gt;$resizeObj -&gt; saveImage('sample-resized.gif', 100);&lt;br&gt;</pre> <hr> <h2> 11. Enregistrez l'image </h2> <p> Nous y arrivons; presque terminé. Il est maintenant temps de sauver l'image. Nous passons dans le chemin et spécifions la qualité d'image que nous aimerions allant de 0 à 100, 100 étant les meilleurs. Ensuite, nous appelons la méthode appropriée. Quelques choses à noter sur la qualité de l'image: JPG utilise une échelle de 0-100, 100 étant le meilleur. Les images GIF n'ont pas de paramètre de qualité d'image. Les PNG le font, mais ils utilisent l'échelle 0-9, 0 étant la meilleure. Ce n'est pas bon car nous ne pouvons pas nous attendre à ce que nous nous en souvenions chaque fois que nous voulons enregistrer une image. Nous pouvons donc faire un peu de magie pour tout standardiser. </p> <pre class="brush:php;toolbar:false"> Class resize&lt;br&gt; {&lt;br&gt; // *** Class variables&lt;br&gt; private $image;&lt;br&gt; private $width;&lt;br&gt; private $height;&lt;br&gt;&lt;br&gt; function __construct($fileName)&lt;br&gt; {&lt;br&gt; // *** Open up the file&lt;br&gt; $this-&gt;image = $this-&gt;openImage($fileName);&lt;br&gt;&lt;br&gt; // *** Get width and height&lt;br&gt; $this-&gt;width = imagesx($this-&gt;image);&lt;br&gt; $this-&gt;height = imagesy($this-&gt;image);&lt;br&gt; }&lt;br&gt; }&lt;br&gt;</pre> <p> est maintenant aussi le bon moment pour détruire notre ressource d'image pour libérer de la mémoire. Si vous deviez l'utiliser en production, cela pourrait également être une bonne idée de capturer et de retourner le résultat de l'image enregistrée. </p> <hr> <h2> Conclusion </h2> <p> Eh bien, c'est ça, les amis. Merci d'avoir suivi ce tutoriel, et j'espère que vous le trouverez utile. </p> <p> <em> Ce message a été mis à jour avec les contributions de Monty Shokeen. Monty est un développeur complet qui aime également écrire des tutoriels et en savoir plus sur les nouvelles bibliothèques JavaScript. </em> </p>

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Article précédent:Planification avec la file d'attente de l'emploi ZendArticle suivant:Aucun