• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで画像のサムネイル作成)

PHPで画像のサムネイル作成

このQ&Aのポイント
  • PHPの画像処理関数を使って、大きなサイズの画像を小さなサムネイルに変換するクラスを作成しました。
  • サムネイルのサイズを変更しても表示される画像が変わらない問題が発生しました。
  • クラスの定義を調べても問題箇所が見つからず、解決方法がわかりません。お知恵を貸していただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

すまそ! XAMPPだと、ImageMagickが入ってないわ。。 無理やり使えるようにしたいなら、これ。 https://qiita.com/qiita_mona/items/c340e6d0417139a9b148 標準の関数(GDライブラリ)だけで、リサイズをするなら、 https://www.php.net/manual/ja/function.imagecopyresized.php $newwidth = $width * $percent; $newheight = $height * $percent; ここに、新しい側のサイズが入るようにして実行で OKじゃないかな。。 ↑これだと、全体的なサイズになるけど、 サムネイルの場合は、 先に、WとHの「長いほう」を基準に 「短いほう」を割り算する感じね。 /* 元のサイズ */ $w=1000; $h=1000; /* 縮小後のサイズ */ $out_w=320; $out_h=240; /* 比率計算 */ $wp=$w/$out_w; $hp=$h/$out_h; echo "W=".($out_w)." H=".($h/$wp); if ($wp>=$hp) echo "こっち"; echo "<br>"; echo "W=".($w/$hp)." H=".($out_h); if ($wp<$hp) echo "こっち"; echo "<br>"; そんで、求まった比率を今回の画素の中心に配置すればOK ようするに・・・ 320x240 というサムネイルサイズに、縮小後 320x200のサイズだとして。。 $center_x=($thm_w-$img_w)/2; $center_y=($thm_h-$img_h)/2; 320-320=0それを2で割って0 240-200=40それを2で割って20 つまり、左上の位置は(0,20)ってこと すべての画像が、真四角とは限らないし、 サムネイルにしたサイズが四角とも限らないから、 比率で求めれば、思った結果に一番近いんじゃないかなとは 思う。。 結局「サムネイルを作る」のと「リサイズする」のは 同じことだから、結果的に正しい結果が得られたら それでいいんじゃないかな~と。 これでどう?

papashiroSooke
質問者

お礼

有難うございます。一応教えて頂いたようにしてやってみます。 また、ひとつ考えたのですが、AsarKingChang さんのおっしゃる通り、結局「サムネイルを作る」のと「リサイズする」のは同じことだから、HTMLの<img>タグを使ってwidth=100 とかにしたらそれでいいような気もします。 多数画像が入ったフォルダーをreaddir()で一つずつ読みだして、 echo "<img src=\"$file_name\" width=100 ><br/>"; のような形です。 いずれにしても、今回はこれで締め切りにさせて頂きたいと思います。 色々教えて頂き、本当に有難うございます。

その他の回答 (1)

回答No.1

なんか、見覚えがあるぞぉ~(w) そんで、やりたいことそのままが、すでにサンプルにあるんだわ。 https://www.php.net/manual/ja/imagick.thumbnailimage.php って感じで、やってみて

papashiroSooke
質問者

お礼

早速にご回答を頂きまして、有難うございます。 前回の私の質問にも答えて頂いた AsarKingChang さんですよね。またお世話になります。 教えて頂いたサイトのサンプルをコピーしてきてみたのですが、 imagick というクラスを何処からインクルードすればよいのかわかりません。 それに、私はまだphpの学習者なので、今実際に大きな画像のサムネイルを作る必要性があるわけではありません。クラス作成の練習としてこれを作ったのですが、それがうまく働かないので、どこにミスがあるのかを知りたいのです。そういう意味で、もしお時間があればで良いのですが、わたしのくらすていぎをみていただけないでしょうか。 宜しくお願いいたします。

関連するQ&A