一直试图从iPhone上检测上传图像的图像方向,然后从中调整它们的方向。
我正在尝试解决在potrait中拍摄的图像以-90度旋转上传的问题。我尝试了许多无效的switch语句,因此决定在我的JSON返回中返回exif数据。
我看到的问题是他们在exif数据中没有方向。
我这样做:
$imagefile = $fileToUpload["tmp_name"];
$destinationImage = imagecreatefromstring(file_get_contents($imagefile));
$exif = exif_read_data($imagefile);
$moveUploadedFile = imagejpeg($destinationImage, $this->uploadDir . "/" . $newFileName, 100);
imagedestroy($destinationImage);
if ($moveUploadedFile) {
$return['ort'] = $exif;
echo json_encode($return);
}
我在回来时(使用萤火虫)看到的是:
FileName:"phpUQZFHh"
FileDateTime:1410465904
FileSize:473421
FileType:2
MimeType:"image/jpeg"
SectionsFound:"COMMENT"
Computed: OBJECT:
Height:700
Width:933
IsColor:1
Comment: ARRAY:
0:"CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 100"
我希望能够像这样使用exif数据:
if (!empty($exif['Orientation'])){
//get the orientation
$ort = $exif['Orientation'];
//determine what oreientation the image was taken at
switch($ort){
case 2: // horizontal flip
break;
case 3: // 180 rotate left
$destinationImage = imagerotate($destinationImage, 180, -1);
break;
}
}
任何帮助?
编辑:下载了已上传的图像并检查其属性后,似乎在上传过程中删除了所有exif数据。
这仍然让我感到困惑的是为什么在上传之前/期间轮换它/如何解决这个问题。
答案 0 :(得分:0)
我想在您从iOS设备上传图片时,exif_read_data函数的返回数据中会显示“Orientation”值。它不适用于桌面浏览器。我可能错了。
答案 1 :(得分:0)
我遇到了同样的问题。事实证明,有些图像在Orientation
上根本没有任何exif数据 - 通常是"正确"方向没有它。我尝试用iPhone拍摄一张风景照片,然后就有了。
在您的情况下,照片可能首先没有exif数据。我也有一些这样的照片(旋转-90度,但没有Orientation
信息)。我可能错了,但没有exif数据,没有编程方式来了解图像是否定向错误。
对于没有Orientation
信息的错误定向的照片,我建议您确保用户看到(预览)要上传的内容。 IME,大多数用户都非常愿意为了解决油漆/ photoshop /等问题。只是为了确保他们有漂亮的照片。
答案 2 :(得分:0)
在将文件移动到服务器目录之前,您可以获得Orientation
值(也适用于iPhone)
$image = $_FILES["image"]["tmp_name"];
$orientation = '';
if (function_exists('exif_read_data'))
{
$exif = exif_read_data(image);
if($exif && isset($exif['Orientation']))
$orientation = $exif['Orientation'];
}