2

通常の PC 画像では問題なく動作する PHP で書かれた写真アップロード スクリプトがありますが、iPhone でスナップした画像をアップロードすると、90 度回転します。どうやら、問題は、新しいカメラとしてのiPhoneが、最新の標準で綴られた方向を含む属性で画像をエンコードすることであり、これを修正するにはexifデータを使用する必要があります。関数 exif_read_data($_FILES['file']['name']); を使用する PHP マニュアルで 2 つのスクリプトを見つけました。方向データを収集し、適切な方向に向けるために必要な調整を行います。しかし、私はそれらを働かせることができません。

まず、マニュアルには PHP 4.2 の時点で有効であると書かれていて、私は 5.2 を実行していますが、exif_read_data 関数が無効であるというエラーが表示されます。

第二に、これらのスクリプトで $image が実際に何を意味するのか、私にはわかりません。以前はmove_uploaded_file($_FILES["file"]["tmp_name"],$target);、ファイルを効果的にアップロードするだけでした。

のファイルの代わりに、$_FILESアップロードすることになってい$imageます$_FILES["file"]["tmp_name"] が、これはファイルから作成された文字列である可能性がありますが、結局のところ、何の $image かわかりませんは...

PHPマニュアルの関数は次のとおりです....

1)

  $exif = exif_read_data($_FILES['file']['name']);
        $ort = $exif['IFD0']['Orientation'];
            switch($ort)
            {
                case 1: 

// nothing
        break;

        case 2: // horizontal flip
            $image->flipImage($public,1);
        break;

        case 3: // 180 rotate left
            $image->rotateImage($public,180);
        break;

        case 4: // vertical flip
            $image->flipImage($public,2);
        break;

        case 5: // vertical flip + 90 rotate right
            $image->flipImage($public, 2);
                $image->rotateImage($public, -90);
        break;

        case 6: // 90 rotate right
            $image->rotateImage($public, -90);
        break;

        case 7: // horizontal flip + 90 rotate right
            $image->flipImage($public,1);   
            $image->rotateImage($public, -90);
        break;

        case 8:    // 90 rotate left
            $image->rotateImage($public, 90);
        break;
    }

2)

  $image = imagecreatefromstring(file_get_contents($_FILES['file']['name']));
    $exif = exif_read_data($_FILES['file']['name']);
    if(!empty($exif['Orientation'])) {
        switch($exif['Orientation']) {
            case 8:
                $image = imagerotate($image,90,0);
                break;
            case 3:
                $image = imagerotate($image,180,0);
                break;
            case 6:
                $image = imagerotate($image,-90,0);
                break;
        }
    }

この問題に遭遇する前に、私はちょうど使用しました

 move_uploaded_file($_FILES["file"]["tmp_name"],$target); to upload file.

これをに変更しました

move_uploaded_file($image,$target);`

これを実行するとexif_read_data、「有効な関数ではありません」というエラーがスローされ、「 file_get_contentsimagecreatefromstringは有効な関数ではありません」と表示されます。

誰かがこの問題をうまく解決しましたか?

4

1 に答える 1

2

少し遅れていると思いますが、これを操作する機能的なスクリプトがあります。唯一のことは、私のスクリプトが画像を保存しないようにサイズを変更することだけです。

とにかく、ここにあなたの解決策があります:

まず、move_uploaded_file を使用して通常どおりファイルを保存し、後で次のコードを実行します。

<?
$buffer = ImageCreateFromJPEG($target);
$exif = exif_read_data($_GET['img']);
if(!empty($exif['Orientation'])){
    switch($exif['Orientation']){
        case 8:
            $buffer = imagerotate($buffer,90,0);
        break;
        case 3:
            $buffer = imagerotate($buffer,180,0);
        break;
        case 6:
            $buffer = imagerotate($buffer,-90,0);
        break;
    }
}

imagejpeg($buffer, $target, 90);
?>

そして、それはあなたの問題を解決するはずです。

よろしく。

于 2014-02-24T08:42:57.337 に答える