phpImageWorkshopで画像を合成・サムネイル作成・縮小しよう

2016年6月21日更新 view: 40 view

php ImageWorkshop って何?

PHPで画像を扱うにはGDよりもライブラリを使うほうが手っ取り早い。
この方法を使うと以下のことができる

  • 画像のサムネイルを生成
  • 画像を合成
  • 画像の拡大縮小
  • 画像の圧縮
  • テキストを合成

今回はcakephp2.xで使い、composerを使わず手動でインストールしてみる。

インストール

・ダウンロード
http://phpimageworkshop.com/installation.html

よりファイル一式をダウンロード。
cakephpの vendors フォルダに入れ、アップロード。

matomater-original

使いたいコントローラーで以下を記述

use PHPImageWorkshop\ImageWorkshop;
require_once(VENDORS . 'PHPImageWorkshop/src/PHPImageWorkshop/Exception/ImageWorkshopException.php');
require_once(VENDORS . 'PHPImageWorkshop/src/PHPImageWorkshop/ImageWorkshop.php');
スポンサードリンク

これでとりあえず読み込めるが、まだエラーが出るはず。

Error: Class 'PHPImageWorkshop\Exception\ImageWorkshopBaseException' not found
File: /home/users/2/hippy.jp-hide99-2/web/yomiplus/vendors/PHPImageWorkshop/src/PHPImageWorkshop/Exception/ImageWorkshopException.php
Line: 21

このようなエラーがでるので、関連ファイルの
require_once(__DIR__.'/ImageWorkshopBaseException.php');
をコメントアウトを解除して有効にする。

・・・エラーが出なくなればインストール完了。

使い方

画像のサムネイルを生成しよう

//どの画像を処理するか
$img = ImageWorkshop::initFromPath('http://xn--t8j4aa4n867l0xd9v5a0kp.com/files/kabu_img/7177.jpg');

//どのサイズにリサイズするか 横 x 縦
$img->resizeInPixel(120, 120, true, 0, 0, 'MM');

$op = [
'dir' => WWW_ROOT.'img/',//画像をどこに保存する?
'name' => 'avatar.png',//どんな名前で保存する?
'createDir' => true,//フォルダ無い場合は自動生成する?
'bgc' => null,//pngで背景色がない場合何色にする?
'quality' => 100//画像のクオリティ
];

//画像を保存
$img->save($op['dir'], $op['name'],$op['createDir'],$op['bgc'],$op['quality']);

画像を合成

//背景画像
$bg = ImageWorkshop::initFromPath(WWW_ROOT.'img/bg.png');

//重ねたい画像
$img = ImageWorkshop::initFromPath('https://pbs.twimg.com/profile_images/718866682031177728/3_eHhOy4_bigger.jpg');

$img->resizeInPixel(65, 65, true, 0, 0, 'MM');

//背景画像に img を重ねる
$bg->addLayerOnTop($img, 2, 2, 'LB');//左から 2px 、下から 2px 開けて合成。left bottom

$op = [
'dir' => WWW_ROOT.'img/',//画像をどこに保存する?
'name' => 'avatar.png',//どんな名前で保存する?
'createDir' => true,//フォルダ無い場合は自動生成する?
'bgc' => null,//pngで背景色がない場合何色にする?
'quality' => 100//画像のクオリティ
];

//重ねられた背景画像を保存
$bg->save($op['dir'], $op['name'],$op['createDir'],$op['bgc'],$op['quality']);

文字を合成

http://okoneya.jp/font/ でフリーフォントをダウンロードします。
GenEiGothicP-H-KL.otf というフォントファイルをアップロード。(他のフォントでもなんでもok)

//背景画像
$bg = ImageWorkshop::initFromPath(WWW_ROOT.'img/bg.png');

$str = "重ねたい文字愛知県"; // 表示するテキスト

$op = [
//先ほどアップロードしたフォントのパス
'font' => VENDORS."PHPImageWorkshop/tests/Resources/fonts/GenEiGothicN-H-KL.otf",
'size' => 42,//文字サイズ
'color' => "FFFFFF",//文字色
'rotation' => 0//文字回転
];

$text = ImageWorkshop::initTextLayer($str,$op['font'],$op['size'],$op['color'], $op['rotation']);

$bg->addLayer(2,$text,0,50,'LT');

$op = [
'dir' => WWW_ROOT.'img/',//画像をどこに保存する?
'name' => 'avatar.png',//どんな名前で保存する?
'createDir' => true,//フォルダ無い場合は自動生成する?
'bgc' => null,//pngで背景色がない場合何色にする?
'quality' => 100//画像のクオリティ
];

//重ねられた背景画像を保存
$bg->save($op['dir'], $op['name'],$op['createDir'],$op['bgc'],$op['quality']);


//base64形式の画像を ファイルにする base64文字列 , 保存したいパス
base64_to_jpg("data:image/jpeg;base64,".$res['Kabu']['manual_img'],WWW_ROOT.$img_path);

おまけ base64形式の画像をファイルにするには?

関数

//base64形式から画像を戻す

function base64_to_jpg($base64_string, $output_file) {

$ifp = fopen($output_file, "wb");

$data = explode(',', $base64_string);

fwrite($ifp, base64_decode($data[1]));
fclose($ifp);

return $output_file;
}
//base64形式の画像を ファイルにする base64文字列 , 保存したいパス
base64_to_jpg("data:image/jpeg;base64,".$res['Kabu']['manual_img'],WWW_ROOT.$img_path);
スポンサードリンク

関連記事

関連カテゴリ