またまた質問よろしくお願いいたします。
現在『基礎からの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);
どうぞよろしくお願いいしたします。
No.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超」のつもりでこう書いたとしても、そんな風に都合よく解釈してくれません。
「思った通りに動かない」とはこういうことです。
>kmeeさん
とても噛み砕いて教えてくださりどうもありがとうございます!
読ませていただいて最初は ??? て感じだったのですが、画像のプロパティ見てたらようやくわかりました!!
私はサイズを、横×縦の幅のことだと勘違いしてたんですね!!
なので、( $file['size'] > 100 * 100 ) を ($w > 100 || $h > 100) に書き換えたらうまく出来ました!!
本当にどうもありがとうございました!!とっても感謝です!!
また何かありましたらどうぞよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
透過PNGが透過されない!!
-
PHP初心者です。画像データ...
-
<img src="http://x.y.com/cgi-...
-
mysqlのblob型の画像表示について
-
GDI+を使ったビット数とDPIの扱い
-
画像が存在しない時の 「×」 表...
-
画像読み込みとランダム表示に...
-
画像をアップロードするプログラム
-
BLOBデーターの画像の表示方法...
-
Illustratorで文字と画像を流し...
-
imagejpegで表示されない。
-
VBAについて教えてください
-
PHP4 透過画像を合成する方法...
-
フォントの色を変えるには?
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
PHPのif文でその処理を途中で抜...
-
別ファイルの変数を呼び出した...
-
.phpと.incファイルの違いはな...
-
一定時間毎に同じ動作を繰り返...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
透過PNGが透過されない!!
-
拡張子php画像をjpg画像等に変...
-
C# Excelファイルへの画像挿入。
-
php,mysqlにて画像パス保存/表...
-
OpenGLで描いて画像ファイル出力
-
move_uploaded_fileのエラーについ
-
PythonのTkinter詳しい方へ。画...
-
SQLiteに画像を格納したい
-
ListViewコントロールでサムネ...
-
C#とJavaで、MP3タグの画像を表...
-
手作業で埋め込んだ、UserForm1...
-
画像リストを作りたい
-
【PHP】サーバー上で TIFFをJPE...
-
BLOBデーターの画像の表示方法...
-
DBに格納された画像データを縮...
-
VBAでJPGサイズ変更
-
どの画像がクリックされたかフ...
-
PHPで吐き出した画像にリンクを...
-
PHP MySQLに画像を直接保存
おすすめ情報