【发布时间】:2013-01-05 03:53:18
【问题描述】:
我有一个用 PHP 编写的照片上传脚本,它可以在普通的 pc 图像上正常工作,但是,当上传在 iphone 上拍摄的图像时,它会将它们旋转 90 度。显然,问题在于 iphone 作为较新的相机对图像进行了编码,其属性包括最新标准中规定的方向,我需要使用 exif 数据来纠正这一点。我在 PHP 手册中找到了两个使用函数 exif_read_data($_FILES['file']['name']); 的脚本。收集方向数据,然后进行必要的调整以正确定位它们。但是,我无法让它们工作。
首先,我收到一个错误,指出 exif_read_data 函数无效,即使手册说它从 PHP 4.2 开始有效并且我运行的是 5.2。
其次,我不清楚 $image 在这些脚本中的真正含义。之前我只是使用move_uploaded_file($_FILES["file"]["tmp_name"],$target);来有效上传文件。
现在我应该上传$image而不是$_FILES中的文件,但我认为这可能与$_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 is not a valid function 错误并且还说 file_get_contents 和 imagecreatefromstring are not valid functions。
有人成功解决了这个问题吗?
【问题讨论】: