【问题标题】:How to properly crop an image taken on iPhone 4G (with EXIF rotation data)?如何正确裁剪在 iPhone 4G 上拍摄的图像(带有 EXIF 旋转数据)?
【发布时间】:2011-11-04 10:53:48
【问题描述】:

伙计们,

我试图让这段代码处理 iPhone 4G 上的相机拍摄的图像,但没有成功:

iPhone - CGImageCreateWithImageInRect rotating some camera roll pictures

此代码非常适合裁剪“正常”图像——我从互联网上下载的图像或我的 iPhone 3G 拍摄的图像。

调用该旋转代码后,iPhone 4G 相机照片似乎在图像的完全随机部分被裁剪。

我什至尝试使用以下代码: Resizing UIimages pulled from the Camera also ROTATES the UIimage?

为了实现旋转,我将图像“调整大小”到与它相同的尺寸,然后尝试在不考虑旋转的情况下裁剪图像。也没有运气。

我有什么方法可以拍摄在 iPhone 4G 相机上拍摄的图像并将其转换为与从互联网上下载的图像具有相同质量/属性的图像(即,没有旋转信息和/或其像素从一开始就正确旋转),以便我尝试执行的后续操作(在本例中为裁剪)将按预期工作?

谢谢!

【问题讨论】:

    标签: iphone ios camera uiimage rotation


    【解决方案1】:

    为此,网络上有 lotsample code out。对于 iPhone 4G,这一切都是不完整或错误的,因为 iPhone 4G 将旋转 EXIF 数据嵌入到其 JPEG 文件中。此数据通过 iOS 4 中新增的 imageOrientation 属性公开。

    使用具有 EXIF 旋转信息的图像裁剪区域的正确方法是使用this dude's code,但不要使用此行:

    UIImage *resultImage = [[[UIImage alloc] initWithCGImage:resultImageRef] autorelease];
    

    你应该这样称呼:

    UIImage *resultImage = [[[UIImage alloc] initWithCGImage:resultImageRef scale:1.0 orientation:originalImage.imageOrientation] autorelease];
    

    第二个调用将旋转信息从原始图像嵌入到 UIImage 中。

    很遗憾,iOS 3.XX 不支持该调用;幸运的是,您不太可能在这些设备上遇到带有 EXIF 信息的图像,因为相机无法拍摄带有旋转信息的照片。

    【讨论】:

    • “这个家伙的代码”是死链接!非常感谢您的帮助。
    • 这适用于纵向,左侧横向但不适用于右侧横向!知道为什么吗?
    • 我也没有理解你的最后评论不幸的是.. - 我使用的是 iOS6
    • 这不是(不再是?)特定于 iPhone 4G 的。包括方向也修复了运行 iOS 7 的 iPad(第 4 代)上的倒置方向问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    相关资源
    最近更新 更多