在PHP 中進行圖像處理時, imagecolorallocatealpha()是一個非常重要的函數。它不僅可以分配顏色,還能控制透明度。但是,很多開發者在使用它時遇到圖像透明度異常的問題,往往是因為對。
本文將詳細分析這個問題,幫助你正確使用imagecolorallocatealpha()函數。
imagecolorallocatealpha()用於為基於GD 庫的圖像分配帶有透明度的顏色。
它的基本語法如下:
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
參數說明:
$image :由imagecreate()或imagecreatetruecolor()創建的圖像資源。
$red 、 $green 、 $blue :RGB 顏色分量,範圍0–255。
$alpha :透明度值,範圍0–127 。
注意: alpha並不是0–255,而是0(完全不透明)到127(完全透明) 。
很多開發者犯的第一個錯誤就是:以為alpha 的值和RGB 一樣是0–255,結果直接把255 塞進去。
來看個例子:
<?php
$img = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($img, 255, 0, 0, 255); // 錯誤
這裡設置的alpha 是255,而GD 庫最多只接受到127。因為超出範圍,GD 會把它當作127,導致完全透明。
正確寫法:
<?php
$img = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($img, 255, 0, 0, 0); // 不透明紅色
$semi_transparent = imagecolorallocatealpha($img, 255, 0, 0, 64); // 半透明紅色
因為GD 庫內部是這樣理解alpha 值的:
0:完全不透明
127:完全透明
如果你填入255,GD 會用min($alpha, 127) ,也就是一律當作最大透明度。這就導致:
本來想畫紅色,結果看不到。
本來想畫半透明,結果全透明。
?記住:alpha 範圍是0–127,而不是0–255。
如果你用0–255 範圍的透明度設計(比如CSS 或RGBA 通用值),需要做一次轉換:
$css_alpha = 128; // 假設用 0–255 表示
$gd_alpha = intval(127 * (255 - $css_alpha) / 255); // 轉換成 GD 用的值
這樣才能保證你在PHP 裡得到一致的透明度效果。
讓我們用一個完整示例把這些串起來: