0

画像のサイズが 604x453 を超えている場合は、604x453 にサイズ変更します。

ここまでできました:

    $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の寸法の黒い四角しか得られません..

私は何を逃しましたか、どうすればこれを解決できますか?

4

1 に答える 1

2

ImageCreateTrueColorと行の間にimagejpegは、次のようなものが必要です。

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

については、PHP のマニュアルを参照してくださいimagecopyresampled()

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

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

インデックス 2 は、イメージのタイプを示す IMAGETYPE_XXX 定数の 1 つです。

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

于 2011-01-09T15:32:58.063 に答える