人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

imagemagickをphpでexecコマンドで利用しています。

不定形の投稿された画像からサムネイルを生成したいと思います。

サムネイルは投稿された画像の中心がサムネイルの中心となり且つ100*100サイズとなるようにしたいと思いますが、どのようにすれば良いでしょうか?

execコマンドを教えていただければと思います。よろしくお願いいたします。

●質問者: ruijio
●カテゴリ:インターネット ウェブ制作
✍キーワード:ImageMagick PHP コマンド サイズ サムネイル
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 敷守ほむら
●60ポイント ベストアンサー

imagemagickを使わなくても、短い辺の長さにあわせた画像を作成し、その後、PHPで100×100の画像を作って、それに当てはめればできます…。

// 画像の幅と高さを取得します(画像ファイルのパスを$filepathとします)

list($width, $height) = getimagesize($filepath);

// 画像を取得します(仮にjpegだとします)

$src = imagecreatefromjpeg($filepath);


// 短い辺の長さを100にするように、縮小した後の縦と横の長さを計算します

if ($width > $height) {

// 横長

$width_thumb = ceil($width * 100 / $height);

$height_thumb = 100;

}

else {

// 縦長

$width_thumb = 100;

$height_thumb = ceil($height * 100 / $width);

}


// 100pixel×100pixelの空の新規画像を作成します

$dst = imagecreatetruecolor(100, 100);

// 作った画像に用意した画像をコピー、伸縮します。

imagecopyresampled($dst, $src, ceil((100 - $width_thumb) / 2), ceil((100 - $height_thumb) / 2), 0, 0, $width_thumbs, $height_thumbs, $width, $height);


どうしてもimagemagickを使いたいのであれば、100pixel×100pixelの空の新規画像を作成する前にimagemagickで縮小した画像を作ってから当てはめる形になるかと思います。

参照:kiyoeri - ImageMagickコマンド集

(imagemagickのバージョンによって使えないコマンドがあるので注意)

// imagemagickを使う

// (仮に/usr/bin/ にimagemagickの実行ファイルがあると仮定)

// $tmpfilepathはテンポラリーファイルのパスを指定

exec('/usr/bin/convert -geometry '.$width_thumb.'x'.$height_height.' "'.$filepath.'" "'.$tmpfilepath.'"');


または、こちらのページの-resizeというコマンドを使って

ImageMagickで簡単に画像処理 - PHPプロ!TIPS+

// imagemagickを使う

// (仮に/usr/bin/ にimagemagickの実行ファイルがあると仮定)

// $tmpfilepathはテンポラリーファイルのパスを指定

exec('/usr/bin/convert "'.$filepath.'" -resize '.$width_thumb.'x'.$height_height.' "'.$tmpfilepath.'"');


これによってimagecopyresampledの指定が変わってきます。たぶんこうだと思うのですが、間違ってたらごめんなさい。

// 作った画像に用意した画像をコピー、伸縮します。

imagecopyresampled($dst, $tmpfilepath, ceil((100 - $width_thumb) / 2), ceil((100 - $height_thumb) / 2), 0, 0, $width_thumbs, $height_thumbs, $width_thumbs, $height_thumbs);

◎質問者からの返答

詳細な回答ありがとうございます。

exec('/usr/bin/convert -geometry '.$width_thumb.'x'.$height_height.' "'.$filepath.'" "'.$tmpfilepath.'"');

を試してみましたがうまくいきませんでした。

$filepathと$tmpfilepathを逆にしたら、このコマンドについてはOKでした!

ただ、最後にphpの関数を使うということですよね?

折角なので、画像生成に関してはすべてimagemgickで行いたいと思います。

最初のgetimagesize($filepath);は初めて知りました。これをうまく使えば座標の計算ができそうですね。

また試してみたいと思います。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ