首页 > 解决方案 > 使用 cloudinary 时 iPhone 图像旋转 90 度

问题描述

我将 Cloudinary 用于我的博客站点(使用节点 js 构建)。我的问题是,当我从 iPhone 上传图像时,它会旋转 90 度。我已经尝试过angle: "ignore",但这似乎不起作用。我认为这与exif信息有关。我该如何摆脱它或者我使用了错误的云参数?(当我在 url 中包含 a_ignore 时也不起作用)

这是上传代码:

let result = await cloudinary.uploader.upload(req.file.path, {resource_type: type, angle:"ignore"});

标签: node.jsiphoneimagerotationcloudinary

解决方案


我先建议angle: "ignore"从上传调用参数中移除,再尝试上传,然后你可能会遇到以下情况之一:

  1. 原件可能没有任何嵌入的旋转元数据,因此无法知道什么是正确的旋转。
  2. 原件可能有旋转元数据,并且交付 URL 是原件的,默认情况下发送原始图像,没有任何 Cloudinary 进程。到目前为止一切都很好,然而,在这一点上,由客户端/设备负责解析元数据并通过旋转元数据正确呈现它,不幸的是,确实存在客户端“忽略”旋转元数据的情况渲染图像。
  3. 图像都是手动旋转的,并且元数据没有被剥离,这可能会导致额外的(不必要的)旋转。

在检查了您认为自己可能处于哪种情况之后,以下是一些可能的解决方法:

  • 对于案例 #1 - 如果您可以访问原始未旋转和未删除元数据的图像版本,请尝试再次上传该图像。
  • 对于案例#2 - 在交付时,不要使用原始图像的交付 URL,而是尝试使用它的派生版本(例如,添加q_auto到 URL 作为转换)。使用 Cloudinary 的任何转换都会在交付前自动优化图像,但重要的是,对于这种情况,它还会通过旋转元数据信息(假设它有一个)旋转图像,最后但并非最不重要的一点是,将剥离元数据,所以它总是按预期的旋转显示图像。
  • 对于案例#3 - 通常一个可能的解决方法是确实添加angle: "ignore",如前所述,建议将其作为交付转换(a_ignore在 URL 中)而不是作为上传参数的一部分。

如果您可以在此处分享原始图像,我将很乐意仔细查看并提供解决方案。如果隐私是一个问题,请与Cloudinary 的支持团队分享,他们很乐意为您提供帮助。


推荐阅读