A Day In The Boy's Life -8ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

ユーザーがアップロードした画像を加工したいといった場合、Linux系なら「ImageMagickを使ってコマンドラインからCAPTCHAを作ってみる」に書いたようにコマンドラインから画像を加工する方法もありますが、 intervention/imageを使えばPHPのプログラム内で簡単に加工をすることができたりします。

intervention/imageを利用する場合、PHP5.4以上でGDまたはImageMagickがインストールされている必要があります。

 

 

intervention/imageを使ってみる

 

まずは、インストール方法ですがcomposer経由でインストールができます。

composer.jsonを使う場合は、下記のような定義ファイルを用意しcomposer updateを実行します。

 

{
    "require": {
        "intervention/image": "2.3.*"
    }
}

 

または、直接composerコマンドから指定してインストールします。

 

$ composer require intervention/image

 

Laravelから使いたい場合は、app.phpにサービスプロバイダに追加すれば使えます。

 

'providers' => array(
    -snip-
    'Intervention\Image\ImageServiceProvider',
),

 

簡単なサンプルプログラムとしては下記のようなものになります。

 

<?php
require 'vendor/autoload.php';
use Intervention\Image\ImageManagerStatic as Image;

$image = Image::make('./foo.jpg')->resize(150, 100)->save('./hoge.jpg');

 

autoload.phpを呼び出し、名前空間の定義をしてstaticでメソッドを呼び出しています。

staticではなくクラスオブジェクトを生成して使うことももちろん可能です(公式のサンプル参照)。

上記の場合、画像の加工としてはfoo.jpgに対して150x100pxにリサイズし、hoge.jpgとして保存しています。

その外に出来ることは、公式マニュアルのAPI一覧を見ればわかるかとおもいますが、代表的なものを紹介します。

 

□ 画像を曇らせる(ぼかす)

 

$image = Image::make('./foo.jpg')->blur(50)->save('./hoge.jpg');

 

blur()の引数で曇らせる度合いを指定します。

 

 

□ 明度を変える

 

$image = Image::make('./foo.jpg')->brightness(50)->save('./hoge.jpg');

 

brightness()の引数で明度を調整できます。

 

 

□ モノクロにする

 

画像を白黒にするあれです。

 

$image = Image::make('./foo.jpg')->greyscale()->save('./hoge.jpg');

 

□ 透明化する

 

Image::make('./foo.jpg')->opacity(50)->save('./hoge.jpg');

 

opacity()の引数で透明度を調整できます。

 

□ 画像の一部を切り抜く

 

$image = Image::make('./foo.jpg')->crop(50, 50, 45, 25)->save('./hoge.jpg');

 

crop()の第1、第2引数は切り抜いた画像のサイズ、第3、第4引数は切り抜き位置(X座標、Y座標)を指定します。

 

□ 画像の余白を削除する

 

キャンパス内に余白がある場合にそれを削って画像の大きさにフィットさせることができます。

 

Image::make('./abc.png')->trim()->save('./hoge.jpg');

 

□ 画像を反転する

 

Image::make('./foo.jpg')->flip('v')->save('./hoge.jpg');

 

flipの第1引数にvを指定すると上下反転させます。デフォルトは左右反転です。

 

 

□ 画像のフォーマットを変更する

 

専用のencode()というメソッドがあるようですが、save()で指定したファイル名でフォーマットを決めて保存することも出来ます。

 

Image::make('./foo.jpg')->save('foo.gif');

 

encode()メソッドの特徴としてdata-urlオプションを指定するとRFC 2397形式のdata://のURIスキームを返してくれたりします。

 

$image = Image::make('./foo.jpg')->encode('data-url');
echo "<img src="$image" />";

 

□ 画像の情報を取得する

 

下記は、画像のサイズを取得します。

 

$size = Image::make('./foo.jpg')->filesize();

 

下記は、画像の高さや横幅を取得します。

 

$height = Image::make('./foo.jpg')->height();
$width = Image::make('./foo.jpg')->width();

 

下記は、画像のMIMEタイプを取得します。

 

$mime = Image::make('./foo.jpg')->mime();

 

下記は、画像のexifを取得します。

 

$exif = Image::make('./abc.jpg')->exif();

 

出力例。

 

array(48) {
["FileName"]=> string(7) "abc.jpg"
["FileDateTime"]=> int(1478581452)
["FileSize"]=> int(188983)
["FileType"]=> int(2)
["MimeType"]=> string(10) "image/jpeg"
["SectionsFound"]=> string(46) "ANY_TAG, IFD0, THUMBNAIL, EXIF, INTEROP, WINXP"
["COMPUTED"]=> array(10) {
    ["html"]=> string(24) "width="640" height="480""
    ["Height"]=> int(480)
    ["Width"]=> int(640)
    ["IsColor"]=> int(1)
    ["ByteOrderMotorola"]=> int(1)
    ["ApertureFNumber"]=> string(5) "f/2.8"
    ["UserComment"]=> string(1) " "
    ["UserCommentEncoding"]=> string(9) "UNDEFINED"  
    ["Thumbnail.FileType"]=> int(2)
    ["Thumbnail.MimeType"]=> string(10) "image/jpeg"
}
-snip-

 

□ 画像を一から作る

 

かなり手間にはなりますが、画像を一から作ることも出来ます。

 

// 300x300pxの灰色のキャンパスを作成
$image = Image::canvas(300, 300, '#999');
// 左上から右下にかけて線を引く
$image->line(0, 0, 300, 300, function ($draw) {
    $draw->color('#0000ff');
});
// 長方形を描く
$image->rectangle(20, 20, 250, 250, function ($draw) {
    $draw->background('#00ff00');
});
// 中心部に円を書く
$image->circle(50, 150, 150, function ($draw) {
    $draw->background('#ff0000');
});
$image->save('./hoge.jpg');

 

それぞれコールバック関数を指定できるのでその中で線や塗りつぶしの色を指定することができたりします。

 

 

まぁ、正直よく使いそうなのは画像のフォーマットの変換やリサイズぐらいかなとは思うのですが、導入も簡単なので画像を加工したい場合に使ってみると良いかと思います。

 

 

 

 

社内でもいくつも業務改善のプロジェクトなんかが立ち上がっては推進されていくわけですけど、数年もしないうちに一気にしぼんでそのサービス自体が衰退してしまうケースってよく見受けられます。

こういうのってプロジェクトオーナーがかじ取りを誤ったり、予算取りがうまくいかずにとりあえず現状維持をしていくうちに使われなくなってきたり、軌道に乗ったのを見るとあとは惰性で何とかなるんじゃないかと一気に熱意が失われていったり色々なんですけど、結局のところしっかりとした運営体制を最初に作りそれを維持できるのかという点が結構大きいと感じたりします。

 

 

サービスの裏に人

 

当たり前ですが、何らかのシステムとか仕組みを作ってサービスを始めたところで、それを支える裏の人というのは当然必要になります。

システムは道具であるわけですから道具を手入れしたり、活用方法を広めていかないと誰も使われなくなります。

 

プロジェクトの開始にはこういった体制をしっかり意識しようとはするものの、月日の流れとともに役割や組織の変遷を経てそれを維持するための裏の人がどんどんとポジションを離れて行ってサービスを維持することができなくなるのはよく見かけます。

かろうじて維持できていたとしても、そこに何らかの意思をもって対処する人はいないわけで、そんなサービスに未来などないわけです。

当然、中の人も「これやってだれか見る人はいるのだろうか」「この作業に意味はあるのだろうか」などとモチベーションも低下することになります。

 

サービスというのは作ることが目的ではなく、それを活用し維持し発展していくことが前提としてあって、その先に求めていた成果があるはずなのに多くは作ることに注力して、できればあとは何とかうまく回っていくだろうという楽観的な発想を持っている人が多かったりもします。

たぶん、当初の計画の中ではサービスのロードマップとして、何をどうしておけば集客や利用率や成果を得ることができるだろう絵空事が描かれているのだと思いますが、当然そんなものは計画通りにいくとは限りません。

また、月日の流れやニーズの移り変わりとともにそのサービスも姿を変えていかなくてはいけないわけですが、そういったことは当初の計画の中には当然盛り込まれていないことで、運用していく中でその部隊がうまく考えてやっていくでしょうというかなりグレーゾーンとして考えられたりもします。

 

結局のところ、サービスの裏には人が必要だというごく当たり前のことがちゃんと考えられていないせいで維持することができない状況になったりするわけです。

 

 

目的・目標を語る人

 

プロジェクトを開始した当初はあれほどそのサービスの必要性を訴えていたのに、いざできてしまうとそれに満足して主力部隊を次のプロジェクトに回してしまうケースもよくある話です。

中の人が変わると引継ぎの過程でそのサービスの目的や意図を正確に把握できなくなったり、新しい人にそのサービスの未来を描くモチベーションを持ってもらうのはなかなか難しいことではあります。

 

また、サービスイン後にプロジェクトで描かれた目標というものを定量的に評価しながら、ずれなどがあればうまく軌道修正する役割の人というのは必要なわけですけど、多くはサービスを作ってしまえば当初の目的や目標というのは忘れ去られてしまうケースが多いのではないでしょうか。

まぁ、数年後に似たようなプロジェクトが立ち上がったりして、「その目的ってどっかできいたことある・・・」とか「あのサービスを作ったのはなんだったのだろうか」とかになるわけです。

それでも「あのサービスはここがよくない」とか「あれ、もう誰も使ってないでしょ?」とか言われてよくわからない道路工事のように掘っては埋めるという誰も得しないプロジェクトが生まれては消えていくことになります。

 

かしこまって目的や目標などを語りだすと周りが距離を取り出すことはあったりもするのですが、それでも誰かがそのサービスの未来というものを描かない限り、何を指標に進めばいいのかわからなくなり混乱を招きます。

こういった混乱は継続するとそのサービスを維持することの意義が失われることにもなってくるので、単純な話そのサービスを誰が何のためにどこに向かわせるのかということを定め、それを常に示すことができる人がいるということが大事なのではないかと思うわけです。

 

 

 

 

心理学って大学のころに少し学んだなーぐらいであんまり興味を持てずにいたのですが、それは十人十色で人それぞれですから心理学といっても人間全般を包括できるような心理的な概念を見出すのって不可能じゃないかなと思ったりもしてたからなんですけど、改めてちゃんと読んでみるととても考えさせられる内容の本でした。

原因と結果という原因論というのは結構仕事の中でも言われることが多かったりして、よくない状況に陥った時にその原因を突き詰められたりするわけですけど、この本に書かれているその結果にあるのは自身がその状況を望んでそうしているという目的論というのがとても斬新なものでした。

 

すべての悩みは対人関係にあるというのも納得できる部分がありますし、その対人関係の悩みにおける課題を分離して、悩みの原因を切り分けようという発想もなるほどと思うところがあります。

これは自分は自分、他人は他人というものであったり、そんなこと相手は微塵も考えていないから単なる被害妄想だ、というものであったりもするんですけど、簡単に言えるものの結構日常ではその課題の分離というのは難しかったりもします。

 

嫌われることを恐れたり、相手の顔色を窺ってふるまったりしてしまうというのは誰しもよくあることで、簡単に「それは君の問題だから自分には関係ない」などといったドライな考えは持てなかったりもします。

それによって面倒なことに巻き込まれたり、日々の生活の中で取るべき行動が複雑化していくことは日常で身をもって体験していくことですが、それを自分が解決するべき問題なのか、相手が解決するべき問題なのかという判断を改めてしていくと、自分における悩みの範疇ではないという気づきとそれによって開放される悩みも多いことに気づいたりもします。

 

結局のところ、自分の生き方を決めるのは自分であって他人ではないというごくシンプルで当たり前のことを改めて痛感させてくれ、それを踏み出す勇気を与えてくれる本でもあります。

 

 

目次

 

第一夜
知られざる「第三の巨頭」
なぜ「人は買われる」なのか
トラウマは、存在しない
人は怒りを捏造する
過去に支配されない生き方
ソクラテスとアドラー
あなたは「このまま」でいいのか
あなたの不幸は、あなた自身が「選んだ」もの
人は常に「変わらない」という決心をしている
あなたの人生は「いま、ここ」で決まる
第二夜
なぜ自分のことが嫌いなのか
すべての悩みは「対人関係の悩み」である
劣等感は、主観的な思い込み
言い訳として劣等コンプレックス
自慢する人は、劣等感を感じている
人生は他社との競争ではない
「お前の顔を気にしているのはお前だけ」
権力争いから復讐へ
非を認めることは「負け」じゃない
直面する「人生のタスク」をどう乗り越えるか
赤い糸と頑強な鎖
「人生の嘘」から目を逸らすな
所有の心理学から使用の心理学へ
第三夜
承認欲求を否定する
「あの人」の期待を満たすために生きてはいけない
「課題の分離」とはなにか
他社の課題を切り捨てよ
対人関係の悩みを一気に解消する方法
「ゴルディオスの結び目」を断て
承認欲求は不自由を強いる
ほんとうの自由とはなにか
対人関係のカードは、「わたし」が握っている
第四夜
個人心理学と全体論
対人関係のゴールは「共同体感覚」
なぜ「わたし」にしか関心がないのか
あなたは世界の中心ではない
より大きな共同体の声を聴け
叱ってはいけない、ほめてもいけない
「勇気づけ」というアプローチ
自分には価値があると思えるために
ここに存在しているだけで、価値がある
人は「わたし」を使い分けられない
第五夜
過剰な自意識が、自分にブレーキをかける
自己肯定ではなく、自己受容
信用と信頼はなにが違うのか
仕事の本質は、他社への貢献
若者は大人よりも前を歩いている
ワーカホリックは人生の嘘
人はいま、この瞬間から幸せになることができる
「特別な存在」でありたい人が進む、ふたつの道
普通であることの勇気
人生とは連続する刹那である
ダンスするように生きる
「いま、ここ」に強烈なスポットライトを当てよ
人生最大の嘘
無意味な人生に「意味」を与えよ