<span><span><span class="hljs-meta"><?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">// 获取平移矩阵</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> => </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-string">'y'</span></span><span> => </span><span><span class="hljs-number">30</span></span><span>]);
</span><span><span class="hljs-comment">// 应用矩阵到图像</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">// 输出结果</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">?></span></span><span>
</span></span>
上述代码将图像向右移动50像素、向下移动30像素。
<span><span><span class="hljs-meta"><?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">// 获取缩放矩阵</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> => </span><span><span class="hljs-number">1.5</span></span><span>, </span><span><span class="hljs-string">'y'</span></span><span> => </span><span><span class="hljs-number">0.8</span></span><span>]);
</span><span><span class="hljs-comment">// 应用矩阵到图像</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">?></span></span><span>
</span></span>
此代码将图像水平放大1.5倍,垂直缩小到0.8倍。
<span><span><span class="hljs-meta"><?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">// 获取旋转矩阵</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> => </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">?></span></span><span>
</span></span>
这里将图像顺时针旋转45度。
有时候,我们需要对图像同时进行缩放和旋转,可以使用 imageaffinematrixconcat 来组合矩阵:
<span><span><span class="hljs-meta"><?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> => </span><span><span class="hljs-number">2.0</span></span><span>, </span><span><span class="hljs-string">'y'</span></span><span> => </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> => </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">?></span></span><span>
</span></span>
矩阵的应用可能会导致图像边缘裁剪,可以使用 imageaffine 的 $clip 参数调整输出尺寸。
imageaffinematrixget 返回的矩阵必须使用浮点数,否则可能出现意想不到的结果。
矩阵顺序很重要:先缩放再旋转与先旋转再缩放结果不同。