从Iphone上传中裁剪不正确的方向,我该怎么办


Jcrop incorrect orientation from Iphone upload, how i can do?

我有一个网站我的jCrop工具可以创建这个流:

用户上传照片 ->他们裁剪它 ->他们把它上传到我的服务器上

当我尝试上传从iPhone相机拍摄的照片时,问题就来了。1-如果我从iPhone上传图片,它在预览/裁剪模式下显示正确方向,然后在php上传后,我看到结果的方向错误。

2-如果我上传通过计算机使用iPhone拍摄的照片,则在预览/裁剪模式下,图片看起来方向错误(垂直照片旋转90度)。

我试图用 php 删除 exif,但问题仍然存在,因为错误的方向是由 exif 和 JCrop 管理的。这是我的 Jcrop 初始化:

// initialize Jcrop
    $('#preview').Jcrop({
                        minSize: [167, 125], // min crop size
                        maxSize: [1500, 1125], // max crop size// min crop size
                        aspectRatio : 500/375, // keep aspect ratio 1:1
                        bgFade: true, // use fade effect
                        bgOpacity: .3, // fade opacity
                        boxWidth: 600,
                        onChange: updateInfoFoto,
                        onSelect: updateInfoFoto
                    }, function(){
                        // use the Jcrop API to get the real image size
                        var boundsFoto = this.getBounds();
                        boundxFoto = boundsFoto[0];
                        boundyFoto = boundsFoto[1];
                        // Store the Jcrop API in the jcrop_api_foto variable
                        jcrop_api_foto = this;

                    });

有没有办法解决这个与iPhone相关的问题?如果没有,则有其他裁剪工具不受此错误的影响?

iPhone使用exif方向数据在浏览器中操作图像。因此,如果您的图像在物理上处于横向模式(例如,在服务器上,宽度>高度),但图像是用 iPhone 纵向拍摄的,它将使用该标签在 iPhone 上的浏览器中旋转图像。(在桌面浏览器上不会发生这种情况)

这就是给jCrop带来麻烦的原因。

因为 jCrop 没有代码来适应这种情况(尽管它可能应该),所以我使用了一个解决方案,首先将图像上传到服务器,更正旋转并使用服务器端代码更新 exif。

所以上传流程是这样的:

  1. 用户选择照片并将其按原样上传到服务器
  2. 当上传提交时,我创建图像的副本,该副本在物理上旋转到exif数据中指示的方向,并确保exif数据相应地更新。(例如,如果 exif 最初表示 90 度 CW 旋转,我执行该旋转,并更新 exif,使其不再指示此旋转)
  3. 当页面在提交后重新加载时,我向 jCrop 工作区显示新版本的图像。

当然,这只有在上传图像的exif方向数据准确时才有效。