gpt4 book ai didi

ios - PHP/IOS 6 在使用 exif 从 iphone 上传时防止图像旋转

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:52 30 4
gpt4 key购买 nike

我有一个用 PHP 编写的照片上传脚本,可以很好地处理普通电脑图像,但是,当上传在 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 and imagecreatefromstring are not valid功能。

有人成功解决过这个问题吗?

最佳答案

我觉得有点晚了,但我有一个功能脚本可以处理这个,唯一的问题是我的脚本可以动态更改大小而不是保存图像。

无论如何,这是您的解决方案:

首先,像往常一样使用 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);
?>

这应该可以解决您的问题。

问候。

关于ios - PHP/IOS 6 在使用 exif 从 iphone 上传时防止图像旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168400/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com