[PHP] LINE Messaging API を使ったチャットボットをテストしてみた

PNG画像の透過部分以外を白単色で塗りつぶします。(塗りつぶしたように見える状態にします)

前提

  • PHP5、PHP7
  • PHPの標準ライブラリ GD を使用

GDライブラリが使用可能かどうか

GDライブラリが使用可能かどうかを調べるには、phpinfo内の GD Support の値を確認します。
enabled であれば使用可能です。

また、ターミナル等で以下のコマンドを実行することでも確認できます。

$ php -m | grep gd
$ gd ## 使用可能であれば出力される

※ちなみに、さくらレンタルサーバーではデフォルトで使用可能なようです

GDライブラリを使用可能にする

上記の方法でGDライブラリが使用不可の状態である場合は、使用可能な状態にします。
実際に試したのは EC2(Amazon Linux)の場合のみなので、それ以外についてはPHPの公式ページを確認してください。

EC2(Amazon Linux)の場合

## GDインストール (PHP7.1系の場合)
$ sudo yum install -y php71-gd

## Apache再起動
$ sudo service httpd restart

塗りつぶす処理

<?php
    $file_path = "sample.png";
    $after_file_path = "sample_after.png";
    try
    {
        if (!file_exists($file_path))
        {
            throw new Exception('対象のファイルが存在しません。');
        }

        $canvas = imagecreatefrompng($file_path);

        imagealphablending($canvas, false);
        imagesavealpha($canvas, true);

        if($canvas && imagefilter($canvas, IMG_FILTER_BRIGHTNESS, 255))
        {
            imagepng($canvas, $after_file_path);
            imagedestroy($canvas);

            $res = true;
        }
        else
        {
            throw new Exception('失敗しました。');
        }
    }
    catch (Exception $e)
    {
        echo $e->getMessage();
    }

タイトルで (塗りつぶしたようにみえる) と書いているとおり、上記処理では、実際に白で塗りつぶしているわけではありません。
やっていることは、透過部分以外の色がついている部分に対して、 輝度を最大にしている ということです。

処理で言うと

imagefilter($canvas, IMG_FILTER_BRIGHTNESS, 255)

の部分です。

任意の色で塗りつぶそうかと試行錯誤してみたのですが、どうもうまくいきませんでした。
今回の目的としては白一色にしたかったのでこれで大丈夫そうですが、できれば任意の色で塗りつぶしたいです。

[紹介元] PHPタグが付けられた新着投稿 – Qiita [PHP] LINE Messaging API を使ったチャットボットをテストしてみた

関連記事