夜空日和 [出張版]

星を見上げながら、今日を語ってみようか

 

スポンサーサイト


Category: スポンサー広告   Tags: ---
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PHP/GD で アルファコンポジットを使った透過画像


Category: 技術   Tags: ---
ネタと言えば、困ったこと→解決したことしかなくなってきた昨今。

今日は「PHP/GDで透過画像ってどうやって作るの?!」という話題。

GIFよろしく「0xFFFFFFは透過色にします(キリッ」って方法もあるんだけど。
これだと、アンチエイリアスかけた時に縁で背景色が混ざっちゃうんだよね。

ってことで、透過PNGだけど、アルファチャンネルを使った透過方法を記述。
メモ程度ね てへぺろ(・ω<)

1. TrueColor → 透過
公式リファレンスにある通り、次のように作成。
/* TrueColorで作る! */
$image = imageCreateTrueColor($width, $height);
/* ピクセルブレンド停止 → PNGでα値を使用する */
imageAlphaBlending($image, false);
imageSaveAlpha($image, true);
/* 透過色で埋める */
$transparent = imageColorAllocateAlpha($image, 0xFF, 0x00, 0xFF, 127);
imageFill($image, 0, 0, $transparent);
ほとんどはこれでOK。
α値を使用しないピクセルブレンドをしたい場合は、imageAlphaBlending を trueにするだけでOK。

2. 透過 + 透過
例えば透過画像に透過画像を追加する場合は、imageCopy で対応できる。
/* 画像のマージ */
imageLayerEffect($imageA, IMG_EFFECT_ALPHABLEND);
imageCopy($imageA, $imageB, 0, 0, 0, 0, $width, $height);
imageLayerEffect($imageA, IMG_EFFECT_NORMAL);
リファレンスを見ると、imageLayerEffect のデフォルト値は IMG_EFFECT_ALPHABLEND みたいに見えるけど、今回の画像を追加する場合は指定しないと上手くマージされなかった。 (imageAlphaBlending は false だよ!)
また、画像の追加だと imageCopyMerge を思い浮かべるけど、こっちだと「透過率指定」があるせいか透過に失敗。
・・・ということで、画像追加は imageCopy で。

3. 透過画像の表示
これ重要、めっちゃ重要。今日はここで数時間悩んだ!
例えば、上記で作成した画像を imagePNG でそのままブラウザに表示したり、ファイルに保存するなら問題無し。
問題は、一度ファイルにPNG形式で保存して、再度表示する場合。
実は、この場合も再度 imageSaveAlpha を設定する必要がある。
/* PNG形式で保存 → 再度開いてブラウザ表示 */
$image= imageCreateFromPNG("test.png");
/* 透過指定 (しないと、背景色:ここでは 0xFF00FF がそのまま表示される) */
imageAlphaBlending($image, false);
imageSaveAlpha($image, true);
/* ブラウザで表示 */
header('Content-type: image/png');
header('Content-transfer-encoding: binary');
imagePNG($image, NULL, 0, PNG_NO_FILTER);
/* 破棄 */
imageDestroy($image);
imagePNG のオプションは適当。
新しいバージョンだと指定しなきゃいけないとか見かけたけど、今回の環境だと何も言われなかった。


GDは不安定だったり、仕様によって大きく変わったりしてるみたいだから、今回の方法で出来ない可能性も。
特に、GDの関数はアルファコンポジットに対応してない物もあるので、要注意を!!
スポンサーサイト


Comments

Leave a Comment



06 2017
SUN MON TUE WED THU FRI SAT
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

05

07


 
プロフィール

ひでたそ

Author:ひでたそ
Comment:
現役大学生で天文好き。
今日もどこかで、上を見ながら歩いています。

 
 
 
最新トラックバック
 
 
検索フォーム
 
 
 
ブロとも申請フォーム
 
QRコード
QRコード
 

Archive   RSS   Login

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。