利用規約の変更について

サーバーの仕様でconvertコマンドにてimagemagickを使用しています
サムネイルの作成でどんな写真がきても指定サイズにフィットしてトリミングするにはどの様にするのでしょうか?

現在は下記の様にリサイズ後に中央からトリミングしておりますが、横長写真は上下サイズが指定サイズに足らなくなってしまいます。

-resize 150x -gravity center -crop 150x100+0+0

別途 cropThumbnailImage というものを見つけたのですが、convertコマンドでする方法がわかりませんでした。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

横長の場合は x150 ではなく x100 と縦の方を基準にしてやればよいので、画像の縦横を比較して値を変更すればよいかと。



list($width, $height) = getimagesize(元画像);//横縦サイズ取得
$resize = ($width > $height) ? "x100":"150x";//横長なら x100 他は 150x
exec("convert -resize $resize ~");


ちなみに "convert -define jpeg:size=150x100 -resize $resize ~"
とサイズ指定すると早くなります。またcropThumbnailImageを使用したいなら
$image = new Imagick("元画像");
$image->cropThumbnailImage(150, 100);
$image->writeImage('保存ファイル名');
こっちが簡単かも知れませんね。
    • good
    • 0
この回答へのお礼

有難うございます

list($width, $height) = getimagesize(元画像);//横縦サイズ取得
$resize = ($width > $height) ? "x100":"150x";//横長なら x100 他は 150x

にてうまくできました、PHPで画像サイズ取得、応じて縦長か横長に振り分け
勉強になりました

cropThumbnailImageは自身のサーバ(convertコマンドでのみimagemagickが使える?)での使用方法が分かららず、PHP内にnew Imagickなどを使うとエラーになってしまいましたが
上記の振り分けの方が色々理解ができ、使用してこうと思います。

合わせてサイズ指定で早くなる方法も有難うございます。

お礼日時:2013/03/16 14:52

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q保存した画像の余白カットしたい

保存した画像についてくる外側の白い余白を取り画像部分だけ残したいのですが、うまい方法はないでしょうか。

Aベストアンサー

windows 付属のペイントでできますよ。
スタート<プログラム<アクセサリ<ペイント 

ファイル→開くで画像を開きます。
左側のツールバーに点線の四角い枠がありますから
それをクリックして、画像の残したい部分をドラッグします。
編集→カット(またはコピー)し
ファイル→新規
編集→貼り付け すると
白い余白を取り除いた残したい部分が表示されます。
それを新たに保存してください。

Qpreg_match関数で正規表現の複数指定方法。

./aaaディレクトリ内においてファイル名に、『bbbb』及び『cccc』と言う文字列が含まれるファイルを./eeeディレクトリに移動させるスクリプトを考えております。

以下は『bbbb』のみを拾うようなスクリプトです。
=========
<?PHP
if ($dir = opendir("./aaa")) {
while (($file = readdir($dir)) !== false) {
if(preg_match("/bbbb/",$file)) rename("./aaa/".$file,"./eee/".$file);
}
closedir($dir);
}
?>
=========
上記は前にこちらで質問させていただき、正常に動くことを確認しております。
今回は『bbbb』及び『cccc』が含まれる場合に./eeeディレクトリに移動させることを考えております。
このような場合は『cccc』はどのよう記載すればよいのでしょうか?ご教授の程よろしくお願いいたします。

Aベストアンサー

どちらとも含まれる場合と言う意味ですよね?

単に preg_match をもう一回やればいいのではないかと。

if(preg_match("/bbbb/",$file)) {
if(preg_match("/cccc/",$file)) {
rename("./aaa/".$file,"./eee/".$file);
}
}

Q連想配列からの値の取り出し

お世話様です。

タイトルにもありますが連想配列を作成した後(以下に記述例)に
その配列からキーを指定して値を取得したいと思っております。
array_keys関数だと値を指定してキーを取得するみたいで
うまくいきませんでした。
何かよい方法ありませんでしょうか?

//配列に格納
while (条件) {
  $aParaOra += array((キー) => (値));
}

Aベストアンサー

解答番号No.1の者です。

ちなみに、キーの指定なしで全部取得するのであれば、
array_values($aParaOra)
で、配列化されたものが返ってきます。

もしくは、以下のようにforeachでループすれば、
キーと値を分離して取得できます。
foreach ($aParaOra as $key => $value) {
# $aParaOra[$key]の値が、$value
}

質問者さんが何をしたいのかがいまいちピンときません。


人気Q&Aランキング

おすすめ情報