phpで、画像を縮小する方法を探しています。


例えば、phpでhtml出力するときに

<img src="xxx">

と出します。
このxxxは、他サイトの画像URLです。

この他サイトの画像を、縮小表示することは可能でしょうか?


画像縮小についていろいろ見ていると、
縮小した画像を保存し、それをxxxの部分のURLに置き換えて表示する、という方法ができそうです。

だけど、できれば、画像を保存しないで、縮小してそのまま表示したいと思っています。

実現できる方法がありましたら、お願いします。

回答の条件
  • 1人5回まで
  • 登録:2007/08/03 17:09:01
  • 終了:2007/08/03 19:47:14

回答(3件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/08/03 17:25:11

ポイント10pt

HTMLタグリファレンス IMG


width と height で大きさを指定できますが、それではだめでしょうか。

id:onigirin

どうもありがとうございます。

すいません。言葉が足りませんでした。

画像の大きさを擬似的に縮小して表示するのではなく、

画像サイズそのものを縮小したいと思っています。

2007/08/03 18:01:31
id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/08/03 18:11:35

ポイント40pt
<?php
$img = 'http://www.hatena.ne.jp/images/top/h1.gif' ; // 読み込む画像のアドレス

$size = 100 ; // リサイズするサイズ (大きい方の幅をこれに合わせる)

if (!($irc = @imagecreatefromjpeg($img))) // jpeg として読み込んでみる
     if (!($irc = @imagecreatefrompng($img))) // png として読み込んでみる
     $irc = @imagecreatefromgif($img) ; // gif として読み込んでみる

if (!$irc) {
  // 画像が正しく読み込めなかったときの処理
  echo '×' ;
  exit ;
}

if (imagesx($irc) > imagesy($irc)) {
  $rrc = imagecreate($size, $size * imagesy($irc) / imagesx($irc)) ;
} else {
  $rrc = imagecreate($size * imagesx($irc) / imagesy($irc), $size) ;
}

imagecopyresampled($rrc, $irc, 0, 0, 0, 0, imagesx($rrc), imagesy($rrc), imagesx($irc), imagesy($irc)) ;

// jpgeg 画像として出力
header('Content-type: image/jpeg') ;
imagejpeg($rrc) ;
?>

こんな感じですかね。

id:onigirin

どうもありがとうございます。

画質がアレだったのですが、trueのほうにしたら無事キレイになりました。

あとは適当にキャッシュさせれば、スピードあがる、ということですね。

2007/08/03 19:40:30
id:Yota No.3

Yota回答回数453ベストアンサー獲得回数282007/08/03 18:27:06

ポイント40pt

いまひとつ質問の趣旨がわかりませんが、他サイトの画像(png)を持ってきて縮小する。(ファイルサイズも小さくなると思う)

$filename = 'http://tasaito/gazou.png';

$percent = 0.5 ;

header('Content-type: image/png');

list($width, $height) = getimagesize($filename);

$newwidth = $width * $percent;

$newheight = $height * $percent;


$thumb = imagecreatetruecolor($newwidth, $newheight);

$source = imagecreatefrompng($filename);

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagepng($thumb);

php.iniの設定。

allow_url_fopen = On

id:onigirin

どうもありがとうございます。

GEN111さんのものと組み合わせて、うまく表示できました。

携帯電話で自分のサイト見たときに、ドデカイ画像ばかりなので、小さく変換するようにしたかった感じです。

他サイト、でなくても仕組みは同じですね・・・。

2007/08/03 19:43:15
  • id:KUROX
    >できれば、画像を保存しないで、
    >縮小してそのまま表示したいと思っています。

    毎回表示の度に縮小処理することになりますが・・。
  • id:kn1967
    phpであれば画像ファイルの大きさを得る事が出来ますので、
    仮に縦横の上限を100pxで表示させたい場合は
    手順1)対象とする画像ファイルの縦と横のサイズを得る
    手順2)縦と横の大きい方を100pxにするための比率を計算する
    手順3)<img src="xxx" width="幅px" height="高さpx">を造る
    これでクライアントでは小さくなって表示されます。

    回答拒否られてるのでヒントだけね。
  • id:KUROX
    それだと、画像サイズがそのままなので、そのまま
    ブラウザーにおくられますよね。
  • id:kn1967
    他サイトの画像という一言があるからね。
    そのまんまが基本的には良いでしょ。
  • id:onigirin
    どうもありがとうございます。

    画像のファイルサイズそのものを縮小したいと思っています。
    例えば、巨大なサイズの画像を、
    携帯電話でも見ることができるような小ささに変換、
    というようなイメージです。

    やはりキャッシュとして保存するのが妥当なんですかねぇ・・・。


    kn1967さんへ

    回答拒否は誰もしていませんが、
    拒否数による拒否設定をしているからかもしれません。
    一言適当に書いて去る人がいて悲しかったので、設定しました。
    ごめんなさい。
  • id:GEN111
    まあ、あまり軽い処理じゃないのでキャッシュする方が妥当でしょうね。
  • id:kn1967
    いえ、直接拒否られてるって訳でも無いと判っただけでも嬉しいです。

    コードに関してはGEN111様から頂戴しているので
    後は自分の書いているページに組み込むだけですね。

    ちなみに、私もキャッシュしておくことをお勧めします。
    問題はデータベース内に収めるかファイルとして書き出しておくかですが
    データベース内に保存しておいて日付単位及び保存した点数にて
    定期的に消すってのが良いかもしれません。
    データベースが使えないならファイル出力になりますので
    その場合は日付+時刻+通し番号をファイル名に入れておくと
    一括削除などが楽になります。

    と、いったところで失礼します。
  • id:GEN111
    imagecreatetruecolor の方が良かったですね。
    訂正
    // jpgeg 画像として出力

    // jpeg 画像として出力
  • id:onigirin
    ■kn1967さん

    どうもありがとうございます。

    とりあえず一歩進めたので、
    キャッシュ化も試してみようと思います。
    手軽にファイル保存試してみますね。


    ■GEN111さん

    どうもありがとうございます。

    ミニサンプルを示して頂けると、
    流れの理解が進むのでとても助かりました。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません