blognplusの画像登録時にリサイズを行う

この記事はblognplusバージョン2.6.2ベースで書いています。
また、サーバーにimagemagickがインストールされている必要があります。
imagemagickがインストールされているのにエラーが出る場合は、ImageMagicKのconvertのパス位置を確認してください。
(/usr/bin/convertの部分です)
またphp.iniのsafe_modeがONになっているとshell_execを実行することは出来ません。

blognplusの初期設定には「表示可能最大サイズ(横×縦)」という項目がありますが
これは画像自体をリサイズするわけではなく、表示上のみのリサイズとなっています。

デジカメで撮ったような画像は非常に大きく、画像編集ソフトを利用してリサイズ後に
アップロードしている方が殆どではないかと思います。
私はそれほど面倒だとは感じませんが、知人から面倒だと言われ
アップロード時に自動でリサイズする変更を加えました。
※リサイズする基準のサイズは、初期設定の「表示可能最大サイズ(横×縦)」を利用しています。

アップロードの処理をしている箇所は2箇所あり、その両方に修正を入れます。
まずは記事の編集時にポップアップで画像挿入する画面の修正です。
ファイル名はpict.phpです。

$error = blogn_mod_db_file_add($user_id, $file_name, $_POST["blogn_comment"]);
@chmod($dest,0666);
// ファイルの種類チェック
if ($size = @getimagesize($dest)) {
// 最大サイズを超える画像の場合はリサイズを行う
if ($size[0] > BLOGN_MAXWIDTH || $size[1] > BLOGN_MAXHEIGHT) {
$ratio1 = BLOGN_MAXWIDTH / $size[0];
$ratio2 = BLOGN_MAXHEIGHT / $size[1];
if ($ratio1 < $ratio2) {
$ratio = $ratio1;
}else{
$ratio = $ratio2;
}
$rwidth = round($size[0] * $ratio);
$rheight = round($size[1] * $ratio);
// resize
shell_exec('/usr/bin/convert -geometry '.$rwidth.'x'.$rheight.' '.$dest.' '.$dest);
}
}

Imagickをサポートしているサーバーであれば、以下のように書いてもOKです。

$error = blogn_mod_db_file_add($user_id, $file_name, $_POST["blogn_comment"]);
@chmod($dest,0666);
// ファイルの種類チェック
if ($size = @getimagesize($dest)) {
// 最大サイズを超える画像の場合はリサイズを行う
if ($size[0] > BLOGN_MAXWIDTH || $size[1] > BLOGN_MAXHEIGHT) {
$ratio1 = BLOGN_MAXWIDTH / $size[0];
$ratio2 = BLOGN_MAXHEIGHT / $size[1];
if ($ratio1 < $ratio2) { $ratio = $ratio1; }else{ $ratio = $ratio2; } $rwidth = round($size[0] * $ratio); $rheight = round($size[1] * $ratio); // resize $image = new Imagick($dest); $image->thumbnailImage($rwidth,$rheight);
//$image->setCompressionQuality(50);
$image->writeImages($dest, TRUE);
$image->clear();
$image->destroy();
}
}

次に管理画面の「ファイル管理」を行う画面の修正です。
ファイル名はadmin.phpになります。
基本的に入れる処理は同じものになります。
当然ながら、こちらもImagickをサポートしていればImagickのロジックでもOKです。

$error = blogn_mod_db_file_add($user_id, $file_name, $comment);
@chmod($dest,0666);
// ファイルの種類チェック
if ($size = @getimagesize($dest)) {
// 最大サイズを超える画像の場合はリサイズを行う
if ($size[0] > BLOGN_MAXWIDTH || $size[1] > BLOGN_MAXHEIGHT) {
$ratio1 = BLOGN_MAXWIDTH / $size[0];
$ratio2 = BLOGN_MAXHEIGHT / $size[1];
if ($ratio1 < $ratio2) {
$ratio = $ratio1;
}else{
$ratio = $ratio2;
}
$rwidth = round($size[0] * $ratio);
$rheight = round($size[1] * $ratio);
// resize
shell_exec('/usr/bin/convert -geometry '.$rwidth.'x'.$rheight.' '.$dest.' '.$dest);
}
}

ちなみに携帯の画面から見ると、更に各携帯端末に合わせて
自動で画面サイズを調整する機能がblognplusにはあります。
しかし、携帯端末のリストが古く、最近の機種では画像が小さく表示されてしまいます。
datディレクトリの中にあるmobilelist.cgiが機種毎の画像表示可能の定義ファイルになります。
つまりmobilelist.cgiを最新のものに更新すれば、比較的新しい機種でも対応が可能となります。
以下のURLよりダウンロード可能です。
BlognPlus 用「mobilelist.cgi」

また携帯でblognplusにアクセスすると画像は直接表示されず
「PIC」というリンクで表示されますが、いちいちリンク先へ飛ぶのも面倒なので
直接表示出来るように修正を加えました。
(携帯のキャッシュ可能なサイズを超えるようなblogですと厳しいかもしれません)
修正するファイル名はindex.phpです。

if ($fsize < 0.4) {
$result = '';
}else{
$result = '[PIC]';
}

と書かれている行を、以下のようにリンクから直接表示に変更します。

if ($fsize < 0.4) {
$result = '';
}else{
$result = '';
}

これで携帯からアクセスした場合でも、機種毎に最適なサイズで直接画像が表示されるようになります。
※mobilelist.cgiは定期的に更新してあげないと、最新の携帯では小さい表示なってしまいます。

いっそリストに乗っていない機種は、最新の機種と割り切って
im.phpのデフォルト値を書き換えるのもありかもしれません。
mobilelist.cgiに機種情報が存在しない場合は、im.phpの以下のデフォルト値が適応されます。

$max_size = 5;
$max_width = 96;
$max_height = 72;
$color_size = 256;

コメントを残す

メールアドレスが公開されることはありません。