通常の 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_contents
imagecreatefromstring
は有効な関数ではありません」と表示されます。
誰かがこの問題をうまく解決しましたか?