[PHP] 画像のサムネイルを作成する方法

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

スマートフォンで撮影した写真をサーバーにアップロードすると、最近の高機能な端末だと数メガバイトの送信が行われます。
 

写真印刷をする場合などは、画素数が大きければ大きいほど好まれますが、WEBサービスでブラウザ表示するだけであれば、かなりのオーバースペックな素材です。
 

wordpressの場合に、アイキャッチやブログで使う写真素材をアップロードした場合、元素材の他に、サイズ別に大中小の画像が作成されます。
 

ある意味この機能は容量の無駄使い機能と思われ、wordpressのディスク圧迫の要因の一つになっています。
 

サムネイルも含めて、必要なタイミングで、その場面で最適なサイズにリサイズして画像表示する事ができるスニペットを作ってみました。
 

ただし、この方法は読み込みのたびに画像のサイズ変換をする処理が走るので、ディスクスペースは軽くなりますが、CPUスペックを通常よりも大量に使用するので、サーバー構成を考えて採用してください。

画像リサイズスニペット

※無駄な関数が多いのはご了承ください。
 

 

index.htmlは、かなり簡易に書いていますが、imgタグのsrc属性に、ライブラリを呼び出しているのが分かれば構造は理解できると思います。
 

imageライブラリで画像のローカルパスやWEB上に存在するURLを登録すれば、そのままimg画像として表示されるというだけなのですが、index.htmlはそのままのサイズで表示するようにしています。

サムネイル表示

 

読み込んだ画像のサイズを200×200で表示するようにしています。
 

 

上記のコードでサムネイル変換しているのですが、$_REQUEST[“thumbnail”]は画像のローカルパスまたはURLを登録し、array(200,200)はサムネイルのサイズ(上限値)を指定しています。
 

最後の”cover”引数は、cssのobject-fitと同じ仕様にしていて、”cover”の他に”contain”と”fixed”を用意しています。
 

coverは、指定した画像サイズ(サムネイルサイズ)に当てはまるように画像をクリッピングして表示
containは、指定画像サイズにハマるように画像を縮小して表示
 

上記2つはアスペクト比をキープして表示されますが、
fixedは、アスペクト比を無視して、指定したサイズの通りにリサイズするようにしています。
※その際に縦サイズに-1(負の値)を登録すると、横サイズに合わせて自動サイズ設定するようになります。
 

こうした処理をサービスにセットし、一時的なアクセス過多による負荷を気にする場合は、一度作り出した画像をキャッシュファイルとして出力しておき、一定時間が来たら削除するような処理を手前で行ってもいいかもしれません。
 

ストレージにも、CPUにも負荷の少なくなるシステム構築は、必須ですからね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です