5

さまざまな拡張子の写真をアップロードしてサイズを変更したい。php は、元の写真の中心から可能な限り大きな正方形を切り取り、360*360 ピクセルで保存します。

コードは jpeg ファイルでは問題なく動作しますが、gif、bmp、および png では 33 バイト サイズの破損したファイルが生成されます。

ほとんどのコードは次のとおりです。

$file_temp = $_FILES["pic"]["tmp_name"];
list ($width, $height, $type) = getimagesize ($file_temp);

$picture_name = "... a name.ext ...";
$upload = "... some dir/$picture_name";



if (move_uploaded_file($file_temp, "$upload"))
{



    //switches content-type and calls the imagecreatefrom... function
    if ($type == 1)
    {
        header ('Content-Type: image/gif');
        $image = imagecreatefromgif($upload);
    }
    elseif ($type == 2)
    {
        header ('Content-Type: image/jpeg');
        $image = imagecreatefromjpeg($upload);
    }
    elseif ($type == 3)
    {
        header ('Content-Type: image/png');
        $image = imagecreatefrompng($upload);
    }
    else
    {
        header ('Content-Type: image/x-ms-bmp');
        $image = imagecreatefromwbmp($upload);
    }


    $image_p = imagecreatetruecolor(360, 360);




    //this code below should preserve transparency but I couldn't try it out for now...

    if($type==1 or $type==3)
    {
        imagecolortransparent($image_p, imagecolorallocatealpha($image_p, 0, 0, 0, 127));
        imagealphablending($image_p, true);
        imagesavealpha($image_p, true);
    }





    //this part is for cropping
    $x=0;
    $y=0;

    if ($width > $height)
    {
        $x= ($width - $height)/2;
        $width = $height;
    }
    else
    {
        $y = ($height - $width)/2;
        $height = $width;
    }





    imagecopyresampled ($image_p, $image, 0, 0, $x, $y, 360, 360, $width, $height);
    if ($type == 1)
        imagegif ($image_p, $upload, 80);
    elseif ($type == 2)
        imagejpeg ($image_p, $upload, 80);
    elseif ($type == 3)
        imagepng ($image_p, $upload, 80);
    else
        imagewbmp ($image_p, $upload, 80);
}

そのため、jpeg ファイルのみが正しく処理され、gif、png、および bmp ファイルは正しく処理されません。アイデアがありません...
よろしくお願いします!

4

2 に答える 2

4

PHP は、これらの形式をサポートするようにコンパイルされていない可能性があります。phpinfo() を実行し、次のような出力を検査します。

GD Support => enabled
GD Version => bundled (2.0.34 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
PNG Support => enabled
libPNG Version => 1.2.10
于 2012-04-05T15:58:28.930 に答える
1

jpg 以外の画像で毎回破損した 33 バイトの画像ファイルを取得しているように見えるため、これはファイルに書き込まれている PHP エラーである可能性があります (PHP ファイルが画像の内容を直接表示しているように見えるため、コンテンツ タイプ ヘッダー)。ファイルをテキスト エディタで開いて、その内容を確認しましたか? 迷惑メールの場合はエラーですが、PHP の警告の場合は、使用している PHP のバージョンがこれらの拡張イメージ タイプをサポートしていない可能性があります。それ、またはコードのどこかに警告がある可能性があります。

于 2012-04-05T16:01:48.213 に答える