PHP Imagemagickを使う pecl imagick で透かし(watermark)を入れる。

PHP

$yum install php-imagick としてみたら以下の php-pecl-imagick をインストールできました。

=======================
 Package                                                アーキテクチャー                       バージョン                                              リポジトリー                                容量
=======================
インストール中:
 php-pecl-imagick-im6                                   x86_64                                 3.7.0-1.el7.remi.7.4                                    remi-php74                                 185 k
     php-pecl-imagick.x86_64 3.4.4-6.el7.remi.7.4 を入れ替えます
依存性関連での更新をします:
 ImageMagick6-libs                                      x86_64                                 6.9.12.34-1.el7.remi                                    remi-safe                                  2.4 M
 php74-php-pecl-imagick                                 x86_64                                 3.4.4-17.el7.remi                                       remi-safe                                  137 k

トランザクションの要約
========================================================================================================================================================================================================
インストール  1 パッケージ

縦横2000以内にscale
scaleImage(w, h, true); で比率合わせてくれるみたいです。

    $max = 2000;
    $image_path = 'path/image.jpg';
    $watermark_path = '/watermark_path/data/images/watermark.png';
    $img = new imagick($image_path);
    $water = new imagick($watermark_path);

    $w = $img->getImageWidth();
    $h = $img->getImageHeight();
    if ($w > $max || $h > $max ) {
        $rate = $w/$h;
        if ($w > $h ) {
            $w = $max;
            $h = (int)($w/$rate);
        } else {
            $h = $max;
            $w = (int)($h/$rate);
        }
        $img->scaleImage($w, $h);
    } else {
        $max = ($w>$h)?$w:$h;
    }
    // water size wに比例
    $water->scaleImage($max/10, $max/10, true);
    $ww = $water->getImageWidth();
    $wh = $water->getImageHeight();

    // composite
    $x = ($w/2) - ($ww/2);
    $y = ($h/2) - ($wh/2);
    $img->compositeImage($water, imagick::COMPOSITE_DEFAULT, $x, $y);
    // 保存
    $img->writeImage($image_path);

こんな感じでwatermarkを画像にかぶせることができました!

コメント

タイトルとURLをコピーしました