プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、画像ファイルに会社とかのロゴを埋め込む
結論から書くと、GDのimagecopy()を使って画像合成をするのが無難そうです。

それでは経緯他を書いていきます。

私の運営しているとあるサイトで画像をいっぱい使っていましてね。
精魂込めた自作のへぼへぼ画像なので、自己主張のロゴを埋めようと思いました。

でも画像ファイルを一つずつ編集していくのは面倒くさくて嫌です(-A-)
プログラムとかで一気に埋められないかな~と考えたのが今回のきっかけでした。

ほんであれやこれやと調べていたら、GDを使って画像に文字を書けるらしいと分かりました。
これでいーんじゃん(--?と思い、早速、こんなサンプルプログラムを作成φ(--)

■test01.php
<?php
$imgFilePath = dirname(__FILE__) . '/img/img01.png';                //元画像ファイルパス
$str = mb_convert_encoding("わわわIT用語辞典", "UTF-8","auto");            //入れる文字

$font = dirname(__FILE__) . '/fonts/TrueType/sazanami-gothic.ttf'; //フォント
$fontSize = 8; //フォントサイズ
$angle = 0; //文字列の傾き
$strPosX = 10; //文字の開始位置(横)
$strPosY = 15; //文字の開始位置(縦)

$strColorR = 0; //文字色(赤要素)
$strColorG = 0; //文字色(緑要素)
$strColorB = 0; //文字色(青要素)

//画像読み込み
$img = imagecreatefromstring(file_get_contents($imgFilePath));

//文字描画
$strColor = imagecolorallocate($img, $strColorR, $strColorG, $strColorB);
imagettftext($img,
    $fontSize,
    $angle,
    $strPosX,
    $strPosY,
    $strColor,
    $font,
    $str);

//出力
header('Content-Type: image/png');
ImagePNG($img);

//後始末
imagedestroy($img);

■img/img01.png
20140802-01.png


処理の内容は、ただ画像を読み込んで上に文字を乗せているだけです。
コード内のコメントを見ていただければ分かると思います。
また、サンプルでは画面に出力していますが、実際には別ファイル名で保存しています。

このプログラムの実行結果がこちらφ(--)

20140802-02.png


おぉ、フォントの調整とかは必要そうだけど中々良いじゃん(*´ェ`*)

……(--)

そんなふうに考えていた時期が俺にもありました。

量産していたら、こんな画像が出来上がっていましたよφ(--)

20140802-03.png


げっ、文字が被ってるじゃん(-A-)

その後、文字の背景色を指定できないかとかあれこれ試したのですが、ダメダメでした。
てか「だったらロゴ画像を用意して合成した方が手っ取り早い」との結論になりました。

そんで、出来あがったのがこちらのサンプルプログラムφ(--)

■test02.php
<?php

$imgFilePath = dirname(__FILE__) . '/img/img02-1.png';                //元画像ファイルパス
$imgFilePathLogo = dirname(__FILE__) . '/img/logo.png';                    //ロゴ画像ファイルパス

//画像読み込み
$img = imagecreatefromstring(file_get_contents($imgFilePath));
$imgLogo = imagecreatefromstring(file_get_contents($imgFilePathLogo));

//位置取得
$logoPosX = imagesx($imgLogo);
$logoPosY = imagesy($imgLogo);

//画像合成
imagecopy($img,
    $imgLogo,
    0,
    0,
    0,
    0,
    $logoPosX,
    $logoPosY);

//出力
header('Content-Type: image/png');
ImagePNG($img);

//後始末
imagedestroy($img);

■img/img02.png
20140802-04.png


■img/logo.png
20140802-05.png


処理の内容は、元画像とロゴ画像を読み込んで重ねあわせているだけです。
サンプルでは画面に出力していますが、実際には別ファイル名で保存しています。

このプログラムの実行結果がこちらφ(--)

20140802-06.png


おぉ、ロゴ画像は作り直すとして、中々良いじゃん(*´ェ`*)

……(--)

幸い、今のところは大きな問題は発生していません。

技術的には凄い思うし、私もウキウキで使ってみましたが、
画像に文字を重ねるのって使い道が難しそうですね。
素直に文字画像(ロゴ画像)を用意して合成した方が楽そうです。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事