画像のリサイズ方法について

このQ&Aのポイント
  • 画像のリサイズ方法について質問です。クラスを作成してリサイズを実行しているのですが、うまくリサイズできません。どこが悪いでしょうか?
  • 画像をリサイズするためのクラスを作成し、そのクラス内でリサイズ処理を実行しようとしています。しかし、なぜかリサイズができません。どの部分に問題があるのでしょうか?
  • 画像のリサイズに関する問題です。リサイズ処理を行うためのクラスを作成し、その中でリサイズを実行していますが、うまく処理が動作しません。どこが原因となっているのか教えてください。
回答を見る
  • ベストアンサー

画像のリサイズの仕方について

<? class Resize { function resize_exec($in, $out, $x, $y){ $img_in = imagecreatefromjpeg($in); $ix = imagesx($img_in); $iy = imagesy($img_in); $img_out = imagecreatetruecolor($ix, $iy); ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, $x, $y, $ix, $iy); $quality = 100;//画質クオリティ(標準値 75) imagejpeg($img_out, $out, $quality); imagedestroy($img_in); imagedestroy($img_out); } } ?> というクラスを作成して コンストラクタ内でnewして $this->resize->resize_exec($upfile, $sendpath, 50, 30); としたのですが、リサイズできません。 どこか悪いでしょうか? 対象画像はとりあえずjpegでいいかなと考えています。

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • tongoko
  • ベストアンサー率87% (7/8)
回答No.1

>$img_out = imagecreatetruecolor($ix, $iy); は $img_out = imagecreatetruecolor($x, $y); です。 >$this->resize->resize_exec($upfile, $sendpath, 50, 30); このクラスだけであれば、 Resize::resize_exec($upfile, $sendpath, 50, 30); で充分です。 newする必要があるのであれば、 $resize = new Resize(); $resize->resize_exec($upfile, $sendpath, 50, 30); などとします。 以下、サンプルファイルです。 tmp フォルダはchmodでパーミッションの設定をしておいてください。 <? class Resize { function resize_exec($in, $out, $x, $y) { $img_in = imagecreatefromjpeg($in); $ix = imagesx($img_in); $iy = imagesy($img_in); $img_out = imagecreatetruecolor($x, $y); ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, $x, $y, $ix, $iy); $quality = 100;//画質クオリティ(標準値 75) imagejpeg($img_out, $out, $quality); imagedestroy($img_in); imagedestroy($img_out); } } Resize::resize_exec("tmp/in.jpg", "tmp/out.jpg", 200, 200); ?>

関連するQ&A

  • imagecreatefromjpeg使用時のメモリ不足と思うのですが

    お世話になります。PHP初心者でわからないことだらけなんですが、教えてください。 画像をアップロード後、サイズを変更するスクリプトを作成したのですが、JEG画像サイズが大きくなるとimagecreatefromjpegの点でエラーになってしまいます。詳しくは「ページを表示できません。」と出てきます。ある程度までのサイズは問題なく実行されるのですが、やはりメモリ制限によるエラーなのでしょうか? スクリプトは下記のとおりです。 ************************************************ $gdimg_in = imagecreatefromjpeg($file_path); $ix = imagesx($gdimg_in); $iy = imagesy($gdimg_in); /*ファイルのサイズを設定*/ if ($ix > $iy) {/*************横長の場合*/ $ox = 500; $oy = ($ox * $iy)/$ix; } else {/*********************縦長の場合*/ $oy = 375; $ox = ($oy * $ix)/$iy; } $gdimg_out = imagecreatetruecolor($ox,$oy); imagecopyresized($gdimg_out,$gdimg_in,0,0,0,0,$ox,$oy,$ix,$iy); imagejpeg($gdimg_out,$file_path); imagedestroy($gdimg_in); imagedestroy($gdimg_out); $img_size = getimagesize($file_path); ************************************************何か解決方法はありますか? 分かる方、是非宜しくお願いします。

    • 締切済み
    • PHP
  • PHP 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
  • 透過合成した画像からの縮小コピーで黒塗りに!

    PHPの処理によって透過処理した画像と画像を合成して出来た画像(test.png)を単純に小さいサイズのPNG画像として コピーしたいのですが、黒塗りになってしまい、調べながら思考錯誤してみましたができません。 分かる方、どうかお知恵を貸して下さい。 下記は、黒塗りになってしまうソースです。 <?php $img = 'http://www.angelito.biz/test.png' ; // 読み込む画像のアドレス $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/png') ; imagepng($rrc) ; ?> ■環境 windows vista xampp/apache 2.2.4 PHP Version 5.2.3

    • ベストアンサー
    • PHP
  • [PHP]GDを利用した画像リサイズについて

    [PHP]GDを利用した画像リサイズについて GDを利用した画像リサイズ処理を行うクラスを作ったのですが、 以下のようなエラー(文字化け)が出てしまい画像出力することができません。 有識者の方、どうか知恵をお貸しください。宜しくお願い致します。 ????JFIF??;CREATOR: gd-jpeg v1.0 (using IJG JPEG v70), quality = 75 ??C    $.' ",#(7),01444'9=82<.342??C  2!!22222222222222222222222222222222222222222222222222??II"?? ???}!1AQa"q2???#B??R??$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????? ???w!1AQaq"2?B???? #3R?br? -------- 以下省略 ---------- ◆作成したPHPファイル ・test.php <?php require_once 'Image.php'; $path = './400x300.jpg'; $r = new Image($path, 75); $r->resize(75); ?> ・Images.php <?php class Image{ var $new_width; var $path; function Image($path, $new_width){ @header("Content-type: image/jpeg"); $this->path = $path; $this->new_width = $new_width; } function resize(){ global $new_width; global $path; // 画像パス $image = imagecreatefromjpeg($this->path); // 画像のサイズを取得 $width = 150; $height = 150; $rate = $this->new_width / $width; $new_height = $rate * $height; $thumb = imagecreatetruecolor($this->new_width, $new_height); imagecopyresized($thumb, $image, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); // imagecopyresampled($thumb, $image_path, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); imagejpeg($thumb, null, 75); imagedestroy($image); } } ?> ◆環境と状況 ・サーバ:WindowsXP(XAMPPを利用してローカル環境を構築) ・phpinfo()にて、GD Support=enabled、JPEG Support=enabledを確認 ・ステップ実行(デバック)にてimagejpeg($thumb, null, 75);まで問題なく実行可能。  ※imagejpeg($thumb, null, 75);実行後上記文字列が出力される。 ・コメントアウト個所のimagecopyresampledでも動作結果は同じ。 ・参考にしたサイト  http://goodjob.boy.jp/chirashinoura/id/79.html 恐れ入りますが、ご回答お願い致します。

    • ベストアンサー
    • PHP
  • PHP GD 画像が縮小できない

    宜しくお願いします。 ※ローカル環境です。 (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);

    • ベストアンサー
    • PHP
  • PHP Version 4.3.9で画像を

    表示させたいのですが以下の関数 imagecreatefromjpeg imagecreatetruecolor imagecopyresized imagejpeg を使うと次のようなエラーが発生します (imagecreatefromjpeg以外でも同じ) Fatal error: Call to undefined function: imagecreatefromjpeg() in /var/www/html/postgres/bbs3/bbs3.php on line 32 どうしたらこれらの関数を使えるようになるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPによる画像の生成による色の変化

    お世話になっております。 PHPでアップロードしたjpg画像を縮小して生成しているのですが、色がおかしくなってしまいます。 (全ての画像が荘ではないのですが、変わるものは元の画像とはまったく違った青の強い色になってしまう。) ソースはこんな感じなのですが、何かおかしい部分があったらお教えいただけますでしょうか。 また、何か画像処理を加えてあるものを使用するとこのような経験がある方いらっしゃいましたらよろしくお願いいたします。 version 4.3.8です。 ******************** function imgjpg($_val1,$_val2,$_val3) { $size=GetImageSize("$_val1"); $image_in = ImageCreateFromJpeg("$_val1"); //縦長か横長か計算 $ratio = $size[0] / $size[1]; if($ratio > 1){ //横長の場合 $image_out = ImageCreate($_val3,$_val3 / $ratio); imagecopyresized($image_out,$image_in,0,0,0,0,$_val3,$_val3 / $ratio,$size[0],$size[1]); } else {//縦長の場合 $image_out = ImageCreate($_val3 * $ratio,$_val3); imagecopyresized($image_out,$image_in,0,0,0,0,$_val3 * $ratio,$_val3,$size[0],$size[1]); } ImageJPEG($image_out,$_val2); ImageDestroy($image_in); ImageDestroy($image_out); ********************

    • ベストアンサー
    • PHP
  • 画像アップロードの拡張子制限

    いつもお世話になっています。 現在画像アップローダーを作っているのですがサイズ制限を100KBまで、拡張子は「gif.jpeg.jpg.png」のみに限定したいのですが可能でしょうか? 拡張子を意図的に偽装してくる場合でもエラーを表示させるようにしたいと思っています。 【現在のソース】 <?php //保存名 $pict_id = aaaa; //画像のコピー copy($_FILES["userfile"]["tmp_name"],"./photo/$pict_id.jpg"); //画像のリサイズ $img = "http://www.xxxxx.jp/photo/$pict_id.jpg"; // 読み込む画像のアドレス $outfile = "./photo/$pict_id.jpg"; $size = 145 ; // リサイズするサイズ (大きい方の幅をこれに合わせる) if (!($irc = @imagecreatefromjpeg($img))) // jpeg として読み込んでみる if (!($irc = @imagecreatefrompng($img))) // png として読み込んでみる $irc = @imagecreatefromgif($img) ; // gif として読み込んでみる if (!$irc) { // 画像が正しく読み込めなかったときの処理 // エラー画面へ $headerLink = "./error.html"; header("Location: ".$headerLink); } if (imagesx($irc) > imagesy($irc)) { $rrc = imagecreatetruecolor($size, $size * imagesy($irc) / imagesx($irc)) ; } else { $rrc = imagecreatetruecolor($size * imagesx($irc) / imagesy($irc), $size) ; } imagecopyresampled($rrc, $irc, 0, 0, 0, 0, imagesx($rrc), imagesy($rrc), imagesx($irc), imagesy($irc)) ; //保存 imagejpeg( $rrc , $outfile ); //出力 header("Content-type: image/jpeg"); // ロケーション $headerLink = "./ok.html"; header("Location: ".$headerLink); ?>

    • 締切済み
    • PHP
  • PHPバッファリングで出力した文字列をセッションで

    こんんばんは。この度もよろしくお願いします。 phpを勉強中の者です。 GDを使って画像をリサイズし、ブラウザに表示したり、データベースに保存したりしたいです。そこで、質問なのですが、バッファリングで出力した文字列をセッションで使うことはできないのでしょうか? 以下のようにしてみましたが、別ページで引き継ぎできません。 セッションで使うためにはどうすれば良いのでしょうか。 そもそもセッションでは使うことができない……まるっきり私の理解が間違っているのでしょうか。 よろしくお願いします。 $filename = 'test.jpg'; $percent = 0.5; list($width, $height) = getimagesize($filename); $new_width = $width * $percent; $new_height = $height * $percent; $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); ob_start(); imagejpeg ($image_p); $img = ob_get_contents(); ob_end_clean(); $_SESSION['img'] = $img; ←できません!

    • ベストアンサー
    • PHP
  • アップロードしたファイルの扱いについて

    教えてください。 1.フォームから画像をアップロードする 2.アップロードされた画像をGDを使いリサイズする。 3.確認画面でアップロードされた画像を表示する。 4.確認OKであれば、MySQLのBLOB型のフィールドに保存する。 という事をファイルを作らず行いたいのですが可能でしょうか? 可能であればやり方をアドバイス頂きたいです。 3番の部分の画像を表示の部分なのですが、 imagecopyresampled($im_out, $im_inp, ・・・・ でリサイズまではOKなのですが$im_outをこの後どう扱うかが分かりません。imagejpegで表示できるのですが、PHPとテンプレートを分けているので<img src="$imagedata">みたいにテンプレートに書きたいのですが。 お願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう