• 締切済み

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); ************************************************何か解決方法はありますか? 分かる方、是非宜しくお願いします。

みんなの回答

回答No.2

> ファイルはちゃんとアップロードされていました。 一つきり分けが出来ました。ソースはしっかりあると言う事ですね。 > ページを表示できません。 とでてきているのに、 > 縮小する前の処理(imagecreatefromjpeg)で > エラーが起きてるみたいです。 と言う根拠は何でしょう? http://php.s3.to/man/function.imagecreatefromjpeg.html のPHPマニュアルにあるように空の画像を表示する方法もありますが、とりあえず $gdimg_in = @imagecreatefromjpeg($file_path); if (!$gdimg_in) { /* オープンに失敗した場合 */ echo "imagecreatefromjpeg で {$file_path}のオープンに失敗"; exit; } としてエラー表示されるか確認する事も良いかと。 あと、エラーが起きるとすれば imagecopyresizedやimagejpegあたりですから、その辺もエラーを出力するようにしてみれば原因が究明しやすいです。

tatsu78s08
質問者

補足

またまた、有難うございます。 >>縮小する前の処理(imagecreatefromjpeg)で >>エラーが起きてるみたいです。 >と言う根拠は何でしょう? これは、imagecreatefromjpegの直前直後に print "aaa"; exit; を記述して試した際に直前だと"aaa"が表示されたんですけど、直後だと"ページを表示できません"と表示されます。 ちなみに $gdimg_in = @imagecreatefromjpeg($file_path); if (!$gdimg_in) { /* オープンに失敗した場合 */ echo "imagecreatefromjpeg で {$file_path}のオープンに失敗"; exit; } で試した際も"ページを表示できません"でした。 やはり、imagecreatefromjpegでのメモリ制限エラーなのでしょうか? もしそうだとしたら、他に画像をリサイズする方法ってありますか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

ピント外れかもしれませんが。。。 ファイルはちゃんとアップロードされていますか? ファイルアップロードの制限はphp.iniで upload_max_filesize post_max_size で制限されています。

tatsu78s08
質問者

補足

ご返答ありがとうございます。 ファイルはちゃんとアップロードされていました。 フォルダに保存されてあり、そのファイルを縮小したいのですが、 縮小する前の処理(imagecreatefromjpeg)で エラーが起きてるみたいです。 メモリー制限によるエラーだと、レンタルサーバーなのでmemory_limitを設定できません。 別の方法で、画像縮小する良い方法はありますか?

全文を見る
すると、全ての回答が全文表示されます。

関連する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
  • 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
  • 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の処理によって透過処理した画像と画像を合成して出来た画像(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で画像縮小

    質問します。自分は今PHPで画像の縮小をしようと思っています。 しかしうまくいきません。 コードは <htm> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>画像縮小</title> </head> <body> <?php $size = getimagesize("dl_button.png"); $image_in = imagecreatefrompng("dl_button.png"); $image_out = imagecreate( 90, 90 ); imagecopyresized( $image_out, $image_in, 0, 0, 0, 0, 90, 90, $size[ 0 ], $size[ 1 ] ); imagepng($image_out,"small.png"); imagedestroy( $image_in ); imagedestroy( $image_out ); ?> <img src = "dl_button.png" border = "0"> <img src = "small.png" border = "0"> </body> </html> となっています。 今のままだとエラーが出て、 「small.pngが見あたらない」と言われてしまいます。 ディレクトリは index.phpとdl_button.pngが同じ場所にあります。

    • ベストアンサー
    • PHP
  • PHPによる画像処理

    PHPを使ってJPG形式の画像をPNG形式に変換しようとしていますが、画像が添付のスクリーンショットのようなものになってしまいます。 以下がPHPスクリプトです。 ちゃんとPNG形式の画像を表示させるにはどうしたらよいのでしょうか。 詳しい方、どうかご教授ください。お願いします。 <?php $fpath='pictures/DSCN1458.JPG'; $scimg=imagecreatefromjpeg(realpath($fpath)); $cpimg=imagecreatetruecolor(200,150); $cl=imagecolorallocate($cpimg,255,0,0); imagecopyresized($cpimg, $scimg, 0,0,0,0,imagesx($cpimg),imagesy($cpimg), imagesx($scimg),imagesy($scimg)); header('Content-type', 'image/png'); imagepng($cpimg); imagedestroy($scimg); imagedestroy($cpimg); ?> <html> <head><title>image transform</title></head> <body > </body> </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 imagecopyresized(

    簡単掲示板を作成しようとしています。 画像のアップロード時のリサイズを行う imagecopyresized(がうまくいかず、黒い画像のまま保管されています。 サイズ「250*150」 ファイル形式「jpg,png,gif」 他のテストサイズは、ファイル形式全てうまくいきました。 「150*150」[300*150][400*400][400*150][800*800]ではうまくいきます。 どうしてなのかわからず困っています。 送り側: <FORM ENCTYPE = "multipart/form-data" ACTION = "up_set.php" METHOD = "post"> <INPUT TYPE = "file" NAME = "myf"> <INPUT TYPE = "submit" VALUE = "アップロード"> </FORM> 受け取り側: $file = $_FILES['myf']; $ima = date('YmdHis'); $fn = $ima.$file['name']; move_uploaded_file($file['tmp_name'], './img/' . $fn); $my_gaz = $fn; $motogazo = @imagecreatefromjpeg("./img/$fn"); list($w,$h) = getimagesize("./img/$fn"); $new_h = 200; $new_w = $w * 200/$h; $mythumb = imagecreatetruecolor($new_w, $new_h); imagecopyresized($mythumb, $motogazo, 0, 0, 0, 0, $new_w, $new_h, $w, $h); if($file['type']=='image/jpeg'){ imagejpeg($mythumb, "./img/thumb_$fn"); } if($file['type']=='image/png'){ imagepng($mythumb, "./img/thumb_$fn"); } if($file['type']=='image/gif'){ imagegif($mythumb, "./img/thumb_$fn"); } print $file['name'] . "のアップロード成功!<BR>" . "<IMG SRC='./img/thumb_$fn'>";

    • ベストアンサー
    • PHP
  • PHP+GDで

    質問させて頂きます。 以下のやり方でサムネイルを作成しています。 $src=imagecreatefromjpeg($dirname . $file); $dst=imagecreatetruecolor($swidth,$sheight); imagecopyresized($dst,$src,0,0,0,0,$swidth,$sheight,$width,$height); imagejpeg($dst, $dirname2 . $file); サムネイル作成する時に、縦横の大小、サイズの大きさに関係なく たまにサムネイル画像が黒くなってしまう現象が発生しています。 回避する方法を探しているのですが中々見つからずに困っています。 もしなにか良い方法を知っている方がいたら 知恵をお貸し下さい。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPの関数の使い方が分かりません。

    お世話になります。 目的は、関数で縮小した画像を4枚、座標を指定して表示させることです。 以下のような、PHPのプログラムを組んで、実行したのですが、 画像が1枚だけ縮小された状態で表示され、うまく行きません。 <?php //4つの同じサイズの縮小画像を表示させたい。 for ($i = 0; $i < 4; $i++) { // ファイルと新規サイズ $filename = 'pr-01.jpg'; //同フォルダ内の画像ファイル名 $percent = 0.2; //縦横比0.2倍のサイズへ。 // コンテントタイプ header('Content-Type: image/jpeg'); // 新規サイズを取得します list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // 読み込み $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // リサイズ imagecopyresized($thumb, $source, $i*100, $i*100, 0, 0, $newwidth, $newheight, $width, $height); // 出力 imagejpeg($thumb); } ?> これについて、教えて下さい。 お願い致します。

    • ベストアンサー
    • PHP