現在の位置: ホーム> 最新記事一覧> イメージロテートを使用して透明なPNG画像を回転させるときの透明性を維持する方法

イメージロテートを使用して透明なPNG画像を回転させるときの透明性を維持する方法

gitbox 2025-09-18

1。ImageRotate ()を使用して、PNG画像を回転させます

まず、PNG画像をロードし、 ImageRotate()を使用して回転させてみます。通常、透明な領域は追加の治療なしで黒くなります。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 負荷 PNG 画像</span></span><span>
</span><span><span class="hljs-variable">$imagePath</span></span><span> = </span><span><span class="hljs-string">'image.png'</span></span><span>;
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-variable">$imagePath</span></span><span>);

</span><span><span class="hljs-comment">// 設定 PNG 画像为透明背景</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-comment">// 旋转画像,角度はです 90 度</span></span><span>
</span><span><span class="hljs-variable">$rotatedImage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagerotate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-number">0</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/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$rotatedImage</span></span><span>);

</span><span><span class="hljs-comment">// 销毁画像资源</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">$rotatedImage</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

上記のコードはPNG画像をロードして回転させますが、 ImageRotate() (つまり充填色)の3番目のパラメーターは0であることに注意してください。つまり、黒は透明な部分を埋めることを意味します。

2。黒の背景の外観を防ぎます

透明性を維持するために、重要なのは、PHPにPNG画像を透明に保つように指示することです。 ImagERotate()関数の前に、画像ブレンドモードが無効になり、アルファチャネルが保存されていることを確認する必要があります。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 負荷 PNG 画像</span></span><span>
</span><span><span class="hljs-variable">$imagePath</span></span><span> = </span><span><span class="hljs-string">'image.png'</span></span><span>;
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-variable">$imagePath</span></span><span>);

</span><span><span class="hljs-comment">// 設定 PNG 画像为透明背景</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);  </span><span><span class="hljs-comment">// 無効 alpha ミックス</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);  </span><span><span class="hljs-comment">// 保存 alpha 通路</span></span><span>

</span><span><span class="hljs-comment">// 旋转画像,角度はです 90 度</span></span><span>
</span><span><span class="hljs-variable">$rotatedImage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagerotate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-number">0</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/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$rotatedImage</span></span><span>);

</span><span><span class="hljs-comment">// 销毁画像资源</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">$rotatedImage</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3.なぜImagealphableending()ImagesAvealpha()を使用するのですか?

  • Imagealphableending($ image、false);アルファチャネルの混合モードを無効にして、操作中に透明な領域が他の色と混合されないようにします。

  • ImagesAvealpha($ image、true);透明な領域が他の色で満たされないように、アルファチャネル(透明情報)を保存することを可能にし、回転した画像は依然として透明な背景を維持します。

4.透明な背景に記入します

画像を透過的に保つのではなく、画像を回転させるときに透明な領域の外側に色を埋めたい場合は、 ImageRotate()に他の塗りつぶしを設定できます。たとえば、塗りつぶしを白に設定します。

 <span><span><span class="hljs-variable">$rotatedImage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagerotate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">127</span></span><span>));
</span></span>

これは、黒ではなく白の透明な領域を埋めます。

5。画像の出力と保存

回転した画像を出力するときは、PNG画像の透明な部分を処理できるため、ImagePng()関数を使用することを忘れないでください。画像をファイルに保存することもできます。

 <span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$rotatedImage</span></span><span>, </span><span><span class="hljs-string">'rotated_image.png'</span></span><span>);
</span></span>