phpでの画像処理エラーについて
phpを使って画像アップロード機能を作成しています。
それで、アップロードした画像を縮小しようとする時に、以下のようなエラーが出ます。
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error:
画像が壊れている為に出ているようなのですが、このようなエラーは皆さんはどのように回避されているのでしょうか?
*因みにエラーが出る画像をフォトショップなどで開こうとしても、開けません。
何か回避する為のいい方法、コーディングなどを教えて頂けないでしょうか?
以下にソースを貼り付けて起きます。
/*************** 画像アップロードフォーム ***************/
<form enctype="multipart/form-data" action="imgupexec.php" method="POST" name=form1>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><input name="imgfile" type="file" class=inp></td>
</tr>
<tr>
<td align="center"><INPUT TYPE=submit VALUE="アップロード" class="btn"></td>
</tr>
</table>
</form>
/*************** 画像アップロードフォーム ***************/
/*************** 画像アップ処理 ***************/
$filetmpname = $_FILES['imgfile']['tmp_name'];
$newfilename = = "main_img" . substr($_FILES['imgfile']['name'], -4, 4);
if (is_uploaded_file($filetmpname)){
move_uploaded_file($filetmpname, $newfilename);
$width = 300; //画像縮小時の高さ設定
$height = 300; //画像縮小時の横幅設定
publish_image_compression($width,$height,$newfilename);
}
/*************** 画像アップ処理 ***************/
/*************** 画像縮小処理 ***************/
function publish_image_compression($width,$height,$targetImage){
//画像を読み込む
if(ereg("jpg$",$targetImage) || ereg("jpeg$",$targetImage ) || ereg("JPG$",$targetImage) || ereg("JPEG$",$targetImage )){
$image = ImageCreateFromJPEG($targetImage); //JPEGファイルを読み込む
}elseif(ereg("gif$",$targetImage) || ereg("GIF$",$targetImage)){
$image = ImageCreateFromGIF($targetImage); //GIFファイルを読み込む
}elseif(ereg("png$",$targetImage) || ereg("PNG$",$targetImage)){
$image = ImageCreateFromPNG($targetImage); //PNGファイルを読み込む
}
//コピー元画像のファイルサイズを取得
list($image_w, $image_h) = getimagesize($targetImage);
//横幅または高さが指定した値より大きい時のみ、画像を縮小する。
if($image_w >= $width or $image_h >= $height){
list($new_width, $new_height) = GetImageSizeResize($width, $height, $image_w, $image_h);
//サイズを指定して、背景用画像を生成
$canvas = imagecreatetruecolor($new_width, $new_height);
//背景画像に、画像をコピーする
imagecopyresampled($canvas, // 背景画像
$image, // コピー元画像
0, // 背景画像の x 座標
0, // 背景画像の y 座標
0, // コピー元の x 座標
0, // コピー元の y 座標
$new_width, // 背景画像の幅
$new_height, // 背景画像の高さ
$image_w, // コピー元画像ファイルの幅
$image_h // コピー元画像ファイルの高さ
);
//画像を出力する
imagejpeg($canvas, // 背景画像
$targetImage,// 出力するファイル名(省略すると画面に表示する)
100 // 画像精度
);
}
}
function GetImageSizeResize($dstWidth, $dstHeight, $srcWidth, $srcHeight){
$factor = max(($dstWidth/$srcWidth),($dstHeight/$srcHeight));
return array($factor*$srcWidth, $factor*$srcHeight);
}
/*************** 画像縮小処理 ***************/
因みにphpを使って画像アップロード機能を作成するのが初めてだったので、
片っ端からネットなどを調べてコーディングしています。
その為、コーディング自体に誤った箇所などがあるかもしれないので、
そのような箇所もあれば教えて頂けると助かります。
お手数ですが、アドバイスを頂けると助かります。
宜しくお願いします。