icon 2012/09/28 [GD]PNG画像合成で背景を白にする
GDでPNG画像を合成する際、元画像のアルファが影響してにじんでしまうことがある。
特に意図してアルファチャンネルを利用しない場合は、truecolorで合成したほうがいいかも。

(1) imageCreateTrueColor() で画像を作成
(2) imagecolorallocate() でカラー作成
(3) imagefill() で背景塗りつぶし

画像を縦に合成するサンプル


function drawImage() {
    $paths[] = 'http://hogehoge/image1.png';
    $paths[] = 'http://hogehoge/image2.png';
    $paths[] = 'http://hogehoge/image3.png';
    foreach ($paths as $key => $path) {
        $images[] = $this->fetchImage($path);
    }
    $this->createImage();
    foreach ($imagesas $key => $image) {
        $images[] = $this->addImage($image);
    }
    $this->drawPng();
}

function createImage() {
    $this->image_x = 0;
    $this->image_y = 0;
    $this->marge_image = imageCreateTrueColor($this->image_width , $this->image_width);
    $white = imagecolorallocate($this->marge_image, 255, 255, 255);
    imagefill($this->marge_image, 0, 0, $white);
}

function drawPng() {
    ImagePng($this->marge_image);
    ImageDestroy($this->marge_image);
}

function addImage($values) {
    ImageCopy($this->marge_image, $values['image'], $this->image_x, $this->image_y, 0, 0, $values['width'], $values['height']);
    ImageDestroy($values['image']);
    $this->image_y+= $values['height'];
}

function fetchImage($path) {
    $values['image'] = ImageCreateFromPng($path);
    if ($values['image']) {
        $values['width'] = ImageSX($values['image']);
        $values['height'] = ImageSY($values['image']);
        
        if ($this->image_width > $values['width']) {
            $this->image_width = $values['width'];
        }
        $this->image_height+= $values['height'];
    }
    return $values;
}
    

このサイトについて

HTML5 & CSS3化しつつあるので、現在IEには対応してません。
できれば、Google Chromeやら Apple SafariのWebKit系をお勧めします。

DBからプログラムまで一応全て自作なので、バグってたらすいません。
実験でFlash版(Flex版)を先に作りましたが、ちょっと停止してます。

プロフィール

新宿近辺でSE & プログラマーしてます。
Webアプリの開発・設計とか、最近はiPhoneとか奮闘してます。
デザインはさっぱりです。

音楽は、昔からCubase打ち込み人間で、そっちの方が経歴は長いですが、最近はやる暇がないです。。。

今は、Gon's Privates ってバンドのキーボードやってます。
単発的に、なんちゃってジャズ系のライブもやってます。

名古屋生まれなのでドラゴンズ好きです。

Info && SNS

Gmail

 yohei.yoshikawa@gmail.com

Twitter

 http://twitter.com/yoo_yoo_yoo

あんまつぶやきませんが、一応技術系メインで使ってます。情報交換はこちらへ

FaceBook

 http://www.facebook.com/#!/profile.php?id=1439130626

海外の知り合いがいないので閑散としてます。

mixi

 http://mixi.jp/show_profile.pl?id=230072

音楽仲間とかはこっちメインでやってます。興味があればこちらへ