Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction ImageAffineMatrixGet dans PHP? Utilisation de base et introduction détaillée

Comment utiliser la fonction ImageAffineMatrixGet dans PHP? Utilisation de base et introduction détaillée

gitbox 2025-09-19

2. Exemples d'utilisation de base

2.1 Traduire l'image

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefromjpeg</span></span><span>(</span><span><span class="hljs-string">'example.jpg'</span></span><span>);

</span><span><span class="hljs-comment">// Obtenez la matrice de traduction</span></span><span>
</span><span><span class="hljs-variable">$matrix</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffinematrixget</span></span><span>(IMG_AFFINE_TRANSLATE, [</span><span><span class="hljs-string">'x'</span></span><span> =&gt; </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-string">'y'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>]);

</span><span><span class="hljs-comment">// Appliquer la matrice à l&#39;image</span></span><span>
</span><span><span class="hljs-variable">$translated</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffine</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$matrix</span></span><span>);

</span><span><span class="hljs-comment">// Résultat de sortie</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/jpeg'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagejpeg</span></span><span>(</span><span><span class="hljs-variable">$translated</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$translated</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Le code ci-dessus déplace l'image 50 pixels vers la droite et 30 pixels vers le bas.


2.2 Zoom l'image

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefromjpeg</span></span><span>(</span><span><span class="hljs-string">'example.jpg'</span></span><span>);

</span><span><span class="hljs-comment">// Obtenez la matrice de mise à l&#39;échelle</span></span><span>
</span><span><span class="hljs-variable">$matrix</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffinematrixget</span></span><span>(IMG_AFFINE_SCALE, [</span><span><span class="hljs-string">'x'</span></span><span> =&gt; </span><span><span class="hljs-number">1.5</span></span><span>, </span><span><span class="hljs-string">'y'</span></span><span> =&gt; </span><span><span class="hljs-number">0.8</span></span><span>]);

</span><span><span class="hljs-comment">// Appliquer la matrice à l&#39;image</span></span><span>
</span><span><span class="hljs-variable">$scaled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffine</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$matrix</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/jpeg'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagejpeg</span></span><span>(</span><span><span class="hljs-variable">$scaled</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$scaled</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Ce code élargit l'image horizontalement de 1,5 fois et se rétrécit verticalement à 0,8 fois.


2.3 Faites pivoter l'image

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefromjpeg</span></span><span>(</span><span><span class="hljs-string">'example.jpg'</span></span><span>);

</span><span><span class="hljs-comment">// Obtenez la matrice de rotation</span></span><span>
</span><span><span class="hljs-variable">$matrix</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffinematrixget</span></span><span>(IMG_AFFINE_ROTATE, [</span><span><span class="hljs-string">'angle'</span></span><span> =&gt; </span><span><span class="hljs-number">45</span></span><span>]);

</span><span><span class="hljs-variable">$rotated</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffine</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$matrix</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/jpeg'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagejpeg</span></span><span>(</span><span><span class="hljs-variable">$rotated</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$rotated</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Ici, l'image est tournée dans le sens horaire de 45 degrés.


3. Utilisation avancée

3.1 combinaison matricielle

Parfois, nous devons faire évoluer et faire pivoter l'image simultanément, et nous pouvons utiliser ImageAffineMatrixCat pour combiner la matrice:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$scale</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffinematrixget</span></span><span>(IMG_AFFINE_SCALE, [</span><span><span class="hljs-string">'x'</span></span><span> =&gt; </span><span><span class="hljs-number">2.0</span></span><span>, </span><span><span class="hljs-string">'y'</span></span><span> =&gt; </span><span><span class="hljs-number">2.0</span></span><span>]);
</span><span><span class="hljs-variable">$rotate</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffinematrixget</span></span><span>(IMG_AFFINE_ROTATE, [</span><span><span class="hljs-string">'angle'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>]);

</span><span><span class="hljs-variable">$combined</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffinematrixconcat</span></span><span>(</span><span><span class="hljs-variable">$scale</span></span><span>, </span><span><span class="hljs-variable">$rotate</span></span><span>);

</span><span><span class="hljs-variable">$transformed</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imageaffine</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$combined</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3.2 Remarques

  1. L'application de la matrice peut provoquer un recadrage de bord d'image, et la taille de la sortie peut être ajustée à l'aide du paramètre Clip $ ImageAffine.

  2. La matrice renvoyée par ImageAffineMatrixget doit utiliser des nombres de points flottants, sinon des résultats inattendus peuvent se produire.

  3. L'ordre de la matrice est très important: le résultat de la mise à l'échelle d'abord puis de la rotation en premier, puis la mise à l'échelle est différente.