宜しくお願いします。
※ローカル環境です。
(WinXP PHP5 Smarty PEAR MySQL ※GDはインストされています。)

下記のコードで、サーバーにもともと上げてある画像(jpeg)を縮小して、
それをブラウザに表示させようと思います。
ですが、縮小されずに、元の画像サイズのまま表示されてしまいます。
おかしな点をご指摘下さいませ。

また、(1)で、
jpegファイルを取り込むコードがありますが、これは、
もし画像がGIFであったりPNGの場合を顧慮するなら、
取り込む際にそれぞれを判定するのが基本でしょうか?
もし、今回のようにサバー元の画像をリサイズするのであれば、拡張子もわかっていますので、
jpegファイルだけのことを考えればいいですが、
たとえば、任意のアップロードされたファイルを扱う場合は、上記3種類を判定すして処理すべきですよね?
以上、2点を回答下さいませ。

// -- (1)
// 画像を読み込む。
$file_path = "http://www元画像.com/img/aa.jpg";
$image = ImageCreateFromJPEG($file_path); //JPEGファイルを読み込む
/***********
$image = ImageCreateFromGIF($file_path); //GIFファイルを読み込む
$image = ImageCreateFromPNG($file_path); //PNGファイルを読み込む
************/

// -- (2)
// 画像のサイズを取得。
$width = ImageSX($image); //横幅(ピクセル)
$height = ImageSY($image); //縦幅(ピクセル)

// -- (3)
// 縮小した画像のサイズを決める。
$new_width = 100;
$rate = $new_width/$width; //圧縮比
$new_height = $rate*$height;

// -- (4)
// 空の画像を作成する。
$new_image = ImageCreateTrueColor($new_width, $new_height);

// -- (5)
// サンプリングしなおす 
ImageCopyResampled($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height);

// -- (6)
// ブラウザに出力する場合。
ImageJPEG($image);
//ImageJPEG($image,'simpletext.jpg');
//ImageGIF($image); //環境によっては使えない
//ImagePNG($image);

// -- (7)
// メモリを解放する。
imagedestroy ($new_image);
imagedestroy ($image);

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

A 回答 (5件)

元の画像サイズのまま表示される原因は「ImageJPEG($image);」で元の画像を出力しているからです。


「ImageJPEG($new_image);」で縮小した画像を出力できます。

画像の種類判別は、下記の関数で出来ます。

・exif_imagetype($filename)
http://jp2.php.net/manual/ja/function.exif-image …

・getimagesize($filename) の戻り値で2番目要素
http://jp2.php.net/manual/ja/function.getimagesi …

下記の関数なら、自動判別で画像を読み込むことが出来ます。

・imagecreatefromstring(file_get_contents($filename))
http://jp2.php.net/manual/ja/function.imagecreat …

この回答への補足

回答有難うございます!お蔭様で、解決できました! 
ただ、画像の種類判別は、 getimagesize()  を利用しようと思いますが、

現在、下記のように pathinfo を記述しております。
これだとダメでしょうか?

$imgpass = pathinfo($file_path);
$extension = $imgpass['extension']; //拡張子のみを取得

補足日時:2011/04/16 10:58
    • good
    • 0
この回答へのお礼

結局のところ、問題は解決いたしました。
色々と有難うございました。

お礼日時:2011/04/17 01:51

>header("Content-type~・・・・は、とても重要なものだと思いますが、


>勉強不足のため、その確固たる意味合いを知らないのが、
>こういった疑問に繋がっているのだと思います。
正直言ってヘッダこれはphp以前のhttpの仕様の問題。
phpやるなら知っていて当然のこと。

header()関数はそのヘッダを送信する関数。
    • good
    • 0
この回答へのお礼

有難うございます。
お蔭様で、随分まえに勉強したことをおさらいすることができました。
概ね理解していた通りで、再認識することができました。

お礼日時:2011/04/17 01:49

参考までに。



・image_type_to_mime_type($imagetype)
http://jp2.php.net/manual/ja/function.image-type …

・image_type_to_extension($imagetype)
http://jp2.php.net/manual/ja/function.image-type …
    • good
    • 0
この回答へのお礼

bx2さん、
追加の回答有難うございます。

お礼日時:2011/04/17 01:51

書き忘れたけど画像を出力するなら前もって


header("Content-type: image/画像形式");
としてヘッダを書いた方がいいよ。

この回答への補足

header("Content-type~・・・・ っという物をつけるのは、
なんとなくその意味がわかる程度で、正直なところ勉強不足です。
実はこの件に関しても疑問がありました。

今回の質問に記載したコードは、リサイズした画像を単にブラウザに出力する
だけのものになっています。
でも、実際は、特定のディレクトリにファイル名をつけて保存するようにします。
そして、Smartyにて開発しておりますので、
テンプレート側(HTML)に、その保存データーを<img>タグで引っ張ってきて表示させようと思っております。
そのため、
他のサイトでも、header("Content-type~・・・・ をつけるようにということを、
記載されていることが殆どですが、
今回のケースでは、
1、データーとしてディレクトリに保存
2、Smartyとの連携で、HTMLテンプレートに出力
という2つの観点から、phpファイルにheader("Content-type~・・・・を
書くのはおかしいのではと思い、記述しておりません。

header("Content-type~・・・・は、とても重要なものだと思いますが、
勉強不足のため、その確固たる意味合いを知らないのが、
こういった疑問に繋がっているのだと思います。

補足日時:2011/04/16 14:53
    • good
    • 0

>現在、下記のように pathinfo を記述しております。


>これだとダメでしょうか?
>$imgpass = pathinfo($file_path);
>$extension = $imgpass['extension']; //拡張子のみを取得
これだと拡張子が偽装されていたり間違った拡張子になっていた場合には
判断できないですよね。
    • good
    • 0
この回答へのお礼

回答有難う御座います。
なるほど、では、
getimagesize() にて画像データーの配列を取得するようにします。

その後、
ifにてgif、jpg、pngを判定い、振り分けます。

お礼日時:2011/04/16 14:34

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

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

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

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

QOS X10.5での sit zip 圧縮解凍

こんにちは。
Mac OSX10.5で圧縮、解凍作業をしたいのでDropStuff/StuffItの試用版をダウンロードしてきてインストールしました。

画面上のエイリアスにファイルをドラッグするとsitxの拡張子で圧縮ができ、圧縮されたファイルをクリックすると自動的に解凍されます。

しかし、したいことは
1)sitで圧縮/解凍したい。 
2)zipでも圧縮/解凍したい の2点です。

DropStuffの設定を見ましたがsitでは圧縮できないようです。また
zipに設定したつもりでも設定が反映されないようです。

どうしたらsit及びzipでの圧縮解凍ができるでしょうか?
ご存知の方お教えください。

Aベストアンサー

StuffIt Standard 10/12収録のDropStuffでは、旧バージョン(拡張子.sit)形式の圧縮はできなくなっているようですね。
じっさいにStuffIt Standard 10/12両方をインストールしてみましたが、ZIP圧縮はできました。もういちど確認してください。

QPHPでGDライブラリを使って縮小した画像を直接表示したい

PHPでGDライブラリを使って、「image.jpg」という画像(800x222のJPEGファイル)を、GETで渡した幅に縮小させたくて、次のように書きました。
-----reimage.php---------------------
<?php
header("Content-Type:image/jpeg");
$old_width=800;
$old_height=222;
$width = htmlspecialchars($_GET['w']);
$height = ($old_height / $old_width) * $width;
$source = imagecreatefromjpeg("image.jpg");
$re_image = imagecreatetruecolor($width,$height);
imagecopyresampled($re_image,$source, 0, 0, 0, 0,$width, $height, $old_width, $old_height);
imagejpeg($re_image);
imagedestroy($re_image);
?>
--------------------------
他のHTMLファイルから
<img src="reimage.php?w=480">
などとすると縮小された画像が表示されるのですが、直接「reimage.php?w=480」を開くと、文字化けした文字列が並んでいるばかりで画像が表示されません。
firefoxでMIMEタイプを見てみると、「text/html」になっています。

>header("Content-Type:image/jpeg");
の部分がうまくいっていないのだと思いましたが、どう直せばいいのか分かりません。

なお、サーバーはxreaの広告免除を使っています。

まだPHPを勉強し始めて日が浅いので、見当違いなことを聞いているかも知れませんが、よろしくおねがいします。

PHPでGDライブラリを使って、「image.jpg」という画像(800x222のJPEGファイル)を、GETで渡した幅に縮小させたくて、次のように書きました。
-----reimage.php---------------------
<?php
header("Content-Type:image/jpeg");
$old_width=800;
$old_height=222;
$width = htmlspecialchars($_GET['w']);
$height = ($old_height / $old_width) * $width;
$source = imagecreatefromjpeg("image.jpg");
$re_image = imagecreatetruecolor($width,$height);
imagecopyresampled($re_image,$source, 0, 0...続きを読む

Aベストアンサー

imagedestroyはしなくても良いのではないでしょうか?
外してたら、すみません。

少し気になるのが、
header("Content-Type:image/jpeg");

header('Content-type: image/jpeg');
の方が、よいかと思います。

QZIPの圧縮レベルによる解凍(展開)速度について

雑誌をスキャンしたもの等、大量の画像ファイルを保存する場合、ZIP形式で圧縮するのが一般的だと思いますが、その際の圧縮レベルの設定について教えてください。

圧縮するときは、圧縮レベルを高くすればするほど圧縮にかかる時間が長くなるというのは分かるのですが、解凍するときはどうなのでしょうか?
そもそもJpegの場合、圧縮してもさほど効果はないようなので、ZIPを直接読み込めるビューワーで画像を閲覧するときに、早く描画できるやり方で圧縮したいと思っています。

無圧縮の方が解凍も早いのでしょうか?それとも無圧縮でも圧縮レベルが高くても解凍速度は変わらないのでしょうか?

いま手元に大量の画像ファイルがなく、試してみることもできませんのでどなたか教えてください。
特に解凍の仕組みも含めて教えて頂けるとありがたいです。

Aベストアンサー

試してみました。

ファイルサイズ 350MB

無圧縮 2秒
圧縮レベル最低 7秒
圧縮レベル最高 10秒

圧縮時ほどの影響は無いですが遅くなるのは間違い無いですね。
ちなみにファイルサイズは最高で8M、最低で7M小さくなっただけでした。

Qphp4用のモジュールをphp5環境で動かすには?

php4用のモジュールなんですけど、php5環境で動かそうと思うと
下記のエラーが出ます。

Fatal error: Using $this when not in object context

  ↓の部分でエラーが出ています。

$this->build_params['text_encoding'] = '7bit';
$this->build_params['html_charset'] = 'iso-2022-jp';
$this->build_params['text_charset'] = 'iso-2022-jp';

ソースを貼ってみましたが、どこを変えればよいのでしょうか。。。
http://blog.goo.ne.jp/michimichi_2/e/67b515da0c462aa206dea3de3057f1f0

なにとぞ、よろしくお願いいたします。

Aベストアンサー

とりあえずその結果からは、通信自体は出来ていて、XMLもとりあえずは取得出来てそうですよね。

$xmlをvar_dumpするなりしてちゃんとXMLデータが受信できているかも念のため確認してみたほうが良さそうですね。

尚、xml_parser_createのあたりのXMLパーサなんですが、私は使ったこと無いので実際どの程度精度が良いのかわからないのと、引数とかもよくわからないんですが、そこの部分が正常にひけていないのであれば、
テスト用のコードの正規表現で、XMLを取得している部分と取り替えてみて、値が取得出来るか確認してみてはいかがでしょうか。

QJAVAでZIP圧縮を行うプログラムを作成したのですがXPの標準機能で解凍できません。

org.apache.tools.zip.ZipEntry;
org.apache.tools.zip.ZipOutputStream;

を使用しZIP圧縮を行うプログラムを作成し無事に圧縮に成功し
解凍ソフトを使用すると解凍もうまくいくのですが
windowsXPの標準で開こうとすると開くことができません。
また、解凍ソフトによっても解凍できないものもあります。

圧縮時に何か特別なことをおこなわないとならないのでしょうか?
よろしくお願いします。

Aベストアンサー

flushとか正しく後処理していますか?
ソースを載せていただければわかるかも。

QPHP GD 画像リサイズ

PHP+GDで携帯サイト用の画像リサイズ処理させるプログラムを書籍のサンプルプログラムを元に作成していますが画像が表示されません。
GD:ver2.17

$image_data = @imagecreatefromjpeg($image_file);
$output_image_data = @imagecreatetruecolor($output_image_x, $output_image_y);
@imagecopyresampled($output_image_data, $image_data, 0, 0, 0, 0,
$output_image_x, $output_image_y, $image_x, $image_y);
header('Content-Type: image/jpeg');
@imagejpeg($output_image_data);
@imagedestroy($image_data);
@imagedestroy($output_image_data);

動作確認は携帯とPC両方でやってますが、携帯だと画像表示されず×が表示され、PCだと文字化けした文字が出力されます。
PCで所々デバック文を表示させたりして確認したところimagecopyresampled関数ではTRUEが返ってきておりましたが、imagejpeg関数以降のデバック文が表示しませんでした。

初心者なのでうまく説明できなくてすいません。
お手数ではございますがご教授お願いします。

PHP+GDで携帯サイト用の画像リサイズ処理させるプログラムを書籍のサンプルプログラムを元に作成していますが画像が表示されません。
GD:ver2.17

$image_data = @imagecreatefromjpeg($image_file);
$output_image_data = @imagecreatetruecolor($output_image_x, $output_image_y);
@imagecopyresampled($output_image_data, $image_data, 0, 0, 0, 0,
$output_image_x, $output_image_y, $image_x, $image_y);
header('Content-Type: image/jpeg');
@imagejpeg($output_image_data);
@imagedestroy($...続きを読む

Aベストアンサー

文字化けってJPEGファイルを文字列で出力しているような気がします。
一応確認ですが、header(~)の前に「html」などタグか何か出力してないですか?

Q解凍圧縮ソフト「NOAH」でフォルダを作らずzip圧縮する方法

解凍圧縮ソフト「NOAH」でフォルダを作らずzip圧縮する方法

例えば、たくさんのjpgファイルが入った「albam」フォルダをzipファイルにするために、
NOAHでフォルダを圧縮するように指定しますと、

albam.zip/albamフォルダ/001.jpg、002.jpg…

という形で圧縮されてしまいます。
これを、

albam.zip/001.jpg、002.jpg…

という構成になるように圧縮するにはどうした良いのでしょうか?
NOAHでは無理でしょうか?

宜しくお願い致します。

Aベストアンサー

albumフォルダ自体をアーカイバにドラッグドロップしていませんか?

フォルダではなく、001.jpg,002.jpg,003.jpg…をCtrl + クリック等で選択した状態でドラッグドロップしてください。

おそらくzipファイル名は001.zipとかそんな感じになるので、あとはこれをalbum.zipとリネームしてください。

#きちんと出来ているか確認するために解凍タブの「フォルダの自動生成」のチェックを外してくださいね。

QPHP ローカル環境の作り方

http://iltt.nobody.jp/page/information/contents/20100430.htm

こちらのサイトを参考にしながら、現在ローカルにPHPの環境を作っています。
段階としては、

1.Active Perl5.10.1.1007
2.Apache2.2.15
3.PHP5.3.2
4.MySQL5.1.46
5.phpMyAdmin

の順にダウンロード・インストールを行っているのですが、PHPのインストールで現在つまずいています。
私はperl5.10.1、Apache2.2.17、php5.3.6をダウンロードしてインストールの手順どおりに行っています。
しかし、PHPに関して参考Webのとおり「VC6 x86 Non Thread Safe」をダウンロード、インストールを開始すると「Web Server Setup」にインストールしたはずのApacheを選択するラジオボタンが出てこないのです。
代わりに、「VC6 x86 Thread Safe」をダウンロードすると参考ページのようにWebサーバの選択画面が出てくるので手順どおりにインストールを行ったのですが、確認用のphpinfo();が表示されず、ダイアログボックスが表示されます。
何が原因なのかわからず、何度も入れ直したりしているのですが何も変わりません。
どなたか、同じように悩んでいらっしゃる方はいないでしょうか?
ぜひ知恵をお貸しいただけたらと思います。

宜しくお願い致します。

http://iltt.nobody.jp/page/information/contents/20100430.htm

こちらのサイトを参考にしながら、現在ローカルにPHPの環境を作っています。
段階としては、

1.Active Perl5.10.1.1007
2.Apache2.2.15
3.PHP5.3.2
4.MySQL5.1.46
5.phpMyAdmin

の順にダウンロード・インストールを行っているのですが、PHPのインストールで現在つまずいています。
私はperl5.10.1、Apache2.2.17、php5.3.6をダウンロードしてインストールの手順どおりに行っています。
しかし、PHPに関して参考Webのとおり「VC6 x86 N...続きを読む

Aベストアンサー

VertrigoServ

もあるよ…。

http://wghost.org/it/2009/05/vertrigoserv.html

Q圧縮してあるzipのファイルを解凍しようとすると

圧縮してあるzipのファイルを解凍しようとすると
「アーカイブ”○○○.zip”を”デスクトップ”に展開できません。
(エラー1ーその操作は許可されていません。)」
とエラーメッセージが出ます。
いつもはzipファイルを解凍することが出来たのですが、そのファイルだけはエラーが出ます。
原因は何でしょうか?
宜しくお願いします。

Aベストアンサー

パスワード付きのZIPファイルか、解凍ディレクトリ付きのZIPファイルになっていると思われます。後者については、専用のソフト(フリー)Lhaplus(http://www.vector.co.jp/soft/win95/util/se169348.html)を使うことで解凍できます。

QPHP4+GDでの画像の減色処理

携帯で写真を見るときに自動的にリサイズして
表示するスクリプトを作成しています。

PHP+GDで画像の減色処理は可能でしょうか?

色数を32~64くらいまで減色する方法が解りません

jpg書き出しの場合は比較的サイズが小さくなるので
問題はないのですがauの古い機種の場合にはpngを
書き出すようにしていますがファイルサイズが
大きくなってしまい表示しきれません。
よろしくお願いします

Aベストアンサー

imagetruecolortopaletteを使えばできそうですよ。
ただし、PHP 4.0.6とGD 2.0.1が必要みたいです。

参考URL:http://www.php.net/manual/ja/function.imagetruecolortopalette.php


人気Q&Aランキング