gpt4 book ai didi

php - 图像在移动设备上正确旋转,而不是在桌面上

转载 作者:搜寻专家 更新时间:2023-10-31 21:29:07 26 4
gpt4 key购买 nike

我上传的图片有一个奇怪的问题。当我在 iPhone 和 iPad 上查看它们时,它们旋转正确,但每当我尝试在桌面上查看它们时,它们都以错误的方向显示。我找不到错误,在花了几个小时处理 EXIF 数据后,我几乎要放弃了。固定方向后,我还调整了图像的大小,但这不应该干扰其他代码。以防万一,我将其包括在内。

我没有足够的声誉来上传图片,但这里有一个链接:
http://i.imgur.com/ARwSUuV.png
http://i.imgur.com/00yj7OJ.png

这是我用来上传的代码:

$path_parts = pathinfo($_FILES["file"]["name"]);
$filepath = $_FILES['file']['tmp_name'];
$image = imagecreatefromstring(file_get_contents($filepath));

// Rotate image correctly!
$exif = exif_read_data($image);
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']){
case 1: // nothing
break;
case 2: // horizontal flip
$image = imageflip($image, IMG_FLIP_HORIZONTAL);
break;
case 3: // 180 rotate left
$image = imagerotate($image,180,0);
break;
case 4: // vertical flip
$image = imageflip($image, IMG_FLIP_VERTICAL);
break;
case 5: // vertical flip + 90 rotate right
$image = imageflip($image, IMG_FLIP_VERTICAL);
$image = imagerotate($image,-90,0);
break;
case 6: // 90 rotate right
$image = imagerotate($image,-90,0);
break;
case 7: // horizontal flip + 90 rotate right
$image = imageflip($image, IMG_FLIP_HORIZONTAL);
$image = imagerotate($image,-90,0);
break;
case 8: // 90 rotate left
$image = imagerotate($image,90,0);
break;
}
}

switch ($path_parts['extension']) {
case 'gif' :
$im = imagecreatefromgif($image);
break;
case 'jpg' :
$im = imagecreatefromjpeg($image);
break;
case 'png' :
$im = imagecreatefrompng($image);
break;
case 'bmp' :
$im = imagecreatefrombmp($image);
break;
}
if($im){
imagejpeg($im, $_FILES['file']['tmp_name'], 40);
}
$image_path = 'd_'.time() . "." . $path_parts['extension'];
$move_result = move_uploaded_file($_FILES['file']['tmp_name'], '../img/results/' . $image_path);

如果您知道为什么它只能在某些平台上正确旋转,我将不胜感激!

编辑:可能应该澄清图像最常从智能手机或平板电脑上传。

最佳答案

有一些错误导致代码无法运行。尝试打开 error reporting帮助您调试此类问题。

  • exif_read_data() 处理文件,而不是 GD 资源,因此传递 $filepath 而不是 $image
  • imageflip() 直接操作资源并返回一个 bool 因此将返回值分配给 $image 会破坏资源。
  • 根本不需要第二个switch() 语句。 imagecreatefrom___() 函数从文件创建资源,但您向它们传递的是一个已经创建的资源 - 您要做的就是输出它。

否则方向校正看起来很准确并且应该适合您(它适用于我用手机拍摄的各种测试照片)。

修改后的代码:

$path_parts = pathinfo($_FILES["file"]["name"]);
$filepath = $_FILES['file']['tmp_name'];
$image = imagecreatefromstring(file_get_contents($filepath));

// Rotate image correctly!
$exif = exif_read_data($filepath);
if (!empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 1: // nothing
break;
case 2: // horizontal flip
imageflip($image, IMG_FLIP_HORIZONTAL);
break;
case 3: // 180 rotate left
$image = imagerotate($image, 180, 0);
break;
case 4: // vertical flip
imageflip($image, IMG_FLIP_VERTICAL);
break;
case 5: // vertical flip + 90 rotate right
imageflip($image, IMG_FLIP_VERTICAL);
$image = imagerotate($image, -90, 0);
break;
case 6: // 90 rotate right
$image = imagerotate($image, -90, 0);
break;
case 7: // horizontal flip + 90 rotate right
imageflip($image, IMG_FLIP_HORIZONTAL);
$image = imagerotate($image, -90, 0);
break;
case 8: // 90 rotate left
$image = imagerotate($image, 90, 0);
break;
}
}

imagejpeg($image, $_FILES['file']['tmp_name'], 40);

$image_path = 'd_'.time() . "." . $path_parts['extension'];
$move_result = move_uploaded_file($_FILES['file']['tmp_name'], '../img/results/' . $image_path);

关于php - 图像在移动设备上正确旋转,而不是在桌面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32135931/

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