2011-01-09 5 views
0

の場合イメージが604x453のサイズを超えている場合は604x453にサイズ変更します。PHP:more than ..pxのサイズが

アイブ氏はここまでそれを作った:

$org_name = stripslashes($_FILES[$upload_name]['name']); 
    $file_size = $_FILES[$upload_name]['size']; 
    $file_temp = $_FILES[$upload_name]['tmp_name']; 
    $file_type = $_FILES[$upload_name]["type"]; 
    $file_err = $_FILES[$upload_name]['error']; 
list($width, $height, $type, $attr) = $imageSizeInfo; 
    $move_me = "images/users/status/".$org_name; 
if(move_uploaded_file($file_temp, $move_me)) { 
    echo "{"; 
    echo  "msg: '".$org_name."'"; 
    echo "}"; 
} 
if($width > 604 && $height > 453) { 
$jpeg_quality = 90; 
$src = "images/users/status/".$org_name; 
$ext= pathinfo($src, PATHINFO_EXTENSION); 
$targ_h = 453; 
$targ_w = 604; 
$path_thumbs = "images/users/status/"; 
$thumb_path = $path_thumbs . '/' . $newfilename; 

if($ext == "jpg" OR $ext == "jpeg" OR $ext == "JPG"){ 
    $img_r = imagecreatefromjpeg($src); 
}elseif($ext == "png" OR $ext == "PNG"){ 
    $img_r = imagecreatefrompng($src); 
}elseif($ext == "gif" OR $ext == "GIF"){ 
    $img_r = imagecreatefromgif($src); 
} 
$dst_r = ImageCreateTrueColor($targ_w, $targ_h); 

imagejpeg($dst_r,$thumb_path,$jpeg_quality); 

unlink($move_me); 
} 

をオリジナルのものをだから、最初、それは元の寸法と、すべてのファイルをアップロードし、それが寸法をチェックし、それのサイズを変更した後、およびリンク解除(削除) ..

今、私は何を知らない、何とかリサイズ手順でそれがうまくいかないと私は唯一の寸法出力として604x453の黒い四角を取得。..

私はどのように私はこの問題を解決することができ、何を欠場でした?

imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $targ_w, $targ_h, $width, $height); 

imagecopyresampled()ためにPHPのマニュアルを参照してください:あなたのImageCreateTrueColorimagejpeg線の間

+0

多くの入力フィルタリングを行った後、ファイル名に単に「stripslashes」を追加することを検討する必要があります。 – berkes

+0

@Berkes、コメントありがとう、どうすればいいですか? – Karem

答えて

2

は、あなたはこのようなものが必要。

あなたの古いコードは基本的に正しいサイズの空白のキャンバスを作成していて、そこから「黒い四角」を作成していました。

ファイル拡張子を使用する代わりに、アップロードされた画像の種類を確認するには、getimagesize()も使用する必要があります。

インデックス2は 画像の種類を示すIMAGETYPE_XXX 定数のいずれかです。

この理由は、file.jpgと呼ばれる画像がアップロードされていることを完全にもっともらしいですが、それは実際に.pngファイルであるということです - getimagesize()はそれがどのような形式を決定するために、画像内のバイトを調べます。

+0

exif_imagetypeでチェックするとどうなりますか? – Karem

+0

@ Karem:私は一度も 'exif_imagetype'を個人的に使ったことはありませんが、マニュアルからは、"画像の最初のバイトを読み取り、その署名をチェック "するのがうまくいきます。編集: "戻り値はインデックス2でgetimagesize()と同じ値ですが、exif_imagetype()ははるかに高速です"。おそらく 'getimagesize'をどこかで呼び出すでしょう(' $ imageSizeInfo'はどこから来たのでしょうか?)、おそらくそれに固執すべきです。 – thirtydot

関連する問題