電子書籍の厳選無料作品が豊富!

こんばんわ

今とても困っています。
その内容は、

「PHPのGDを使って透過PNGを減色させる」といった処理なのですが、
減色関数?のimageTrueColorToPalette()を使って処理を行っても、透過が
保持されず、添付画像のようになってしまいます。
作成したコードは以下になります。

$pngimg="./ff-logo-big.png";
$resource = imageCreateFromPng($pngimg);
echo "<img src = './befor.png'><br>";
imagetruecolortopalette($resource,false,255);
imagepng($resource , "./after.png");
imagedestroy($resource);
echo "<img src = './after.png'><br>";

どうすれば透過を保持したまま減色する事ができるのか、教えて
頂けたら光栄です。そもそもphpのGDを使ってというのは無理なの
でしょうか?

他の言語を含め、何か方法があれば教えて下さい。
よろしくお願いします。

「こんばんわ」の質問画像

A 回答 (1件)

imagetruecolortopaletteは、透過色を保持したまま、減色するということは出来なさそうです。



やるとすれば、減色を行う前に、
imagecolortransparent
http://jp2.php.net/manual/ja/function.imagecolor …
で、透過色のIDを取得して、

imagecolorsforindex
http://jp2.php.net/manual/ja/function.imagecolor …
で、透過色のIDに指定されている色情報を取得しておいて

その後に、imagetruecolortopaletteで、減色して、
imagecolorsforindex関数で取得した色配列を、

imagecolorexact
http://jp2.php.net/manual/ja/function.imagecolor …
で、減色後の画像から探してきて、

存在してたら
imagecolortransparentで再設定する、って感じじゃないですかね。


<?php
$resource = imagecreatefrompng($pngimg);

$trns = imagecolortransparent($resource);

$col = null;

if($trns > 0){
$col = imagecolorsforindex($resource, $trns);
}

imagetruecolortopalette($resource, false, 255);

if($col !== null){
$id = imagecolorexact($resource, $col['red'], $col['green'], $col['blue']);

if($id != -1){

imagecolortransparent($resource, $id);

}

}


?>
といった感じでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!