プロが教えるわが家の防犯対策術!

またまた質問よろしくお願いいたします。
現在『基礎からのPHP』という本に記載されている画像掲示板を書き写してやってみてるのですが、
サムネイル生成について、本ではjpgのみで書かれていますが、gifも付け足したいと思い、やってみたのですが、gif画像が縮小されず元サイズのままimgフォルダにも保存されてしまってます。

それでgifのみでやるとどうかと思って、元のコードのjpgのところをgifに書き換えてやってみたのですが、それでも縮小されません(jpgならうまくいきます)。
この理由がわかりますでしょうか?そのコードは以下です。

//アップロードされた画像ファイルを移動
$ima = date('YmdHis');
$fn = $ima . $file['name'];
move_uploaded_file($file['tmp_name'], './gz_img/'.$fn);

//サムネイルの作成
$motogazo = "";
$motogazo = imagecreatefromgif(dirname(__FILE__) . "./gz_img/$fn");
if(!$motogazo){
print "<p>メモリ不足です。<br>
ファイルサイズを小さくしてから再度送信してください。</p>
<p><a href='g_up,php'>アップロード画面に戻る</a></p>";
} else{

list($w,$h) = getimagesize(dirname(__FILE__) . "./gz_img/$fn");

if($file['size'] > 100 * 100){
$new_h = 100;
$new_w = $w * 100 / $h;

} else{
$new_h = $h;
$new_w = $w;
}
$mythumb = imagecreatetruecolor($new_w,$new_h);

$bg = imagecolorallocate($mythumb, 255, 255, 255); //背景用の白作成(ここはgifの背景が黒くなるのを防ぐため付け足しました)
imagefill($mythumb, 0, 0, $bg);  //背景を白で塗りつぶす(ここもgif用に付け足しました)

imagecopyresized($mythumb,$motogazo,0,0,0,0,$new_w,$new_h,$w,$h);
imagegif($mythumb,"./gz_img/thumb_$fn");

imagedestroy($motogazo);
imagedestroy($mythumb);

どうぞよろしくお願いいしたします。

A 回答 (1件)

プログラムは思った通りに動かない。


書いた通りに動く。

という格言があります。
このプログラムがそのように動くのは、そのように動くように書かれているからです。

ということは、どうしたら「そのよう」に動くかを考えれば、逆に問題点をつきとめることができるのです。


そんな目線で見れば。
「画像サイズが変わらない」ということは、「画像サイズを変える部分が期待通りに動いていないのでは?」という仮説が立ちます。

ということで、現在の画像サイズから縮小したサイズを計算している箇所に注目します。

if($file['size'] > 100 * 100){
$new_h = 100;
$new_w = $w * 100 / $h;
} else{
$new_h = $h;
$new_w = $w;
}

$w,$hは現在の画像サイズ
$new_w,$new_hは新しい画像サイズ。
( $file['size'] > 100 * 100 ) ならば高さ100,幅は画像比を保持して。
そうでなければ、現在のサイズを使う

というプログラムになっています。
画像サイズが変わっていない、ということは ( $file['size'] > 100 * 100 ) ではない、と予想されます。

実際にどうなっているか確認しましょう。





$fileにどんなデータが入っているか知りませんけど、 $file['size'] って「ファイルサイズ」ではないでしょうか?
それと、 100*100 を「100x100の画素の画像サイズ 」のつもりで使っているのでは?
100*100はそのまま計算されて 10000 になります。
従って、ここは「 $file['size'] > 10000 」と解釈されます。 ファイルサイズという予想が正しければ 「ファイルサイズが10000超」という意味です。

「画像サイズが100x100超」のつもりでこう書いたとしても、そんな風に都合よく解釈してくれません。
「思った通りに動かない」とはこういうことです。
    • good
    • 0
この回答へのお礼

>kmeeさん
とても噛み砕いて教えてくださりどうもありがとうございます!

読ませていただいて最初は ??? て感じだったのですが、画像のプロパティ見てたらようやくわかりました!!
私はサイズを、横×縦の幅のことだと勘違いしてたんですね!!

なので、( $file['size'] > 100 * 100 )  を  ($w > 100 || $h > 100) に書き換えたらうまく出来ました!!

本当にどうもありがとうございました!!とっても感謝です!!
また何かありましたらどうぞよろしくお願いいたします。

お礼日時:2015/11/20 11:56

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