1. 程式人生 > >iOS照相機獲取到的圖片自動旋轉90度解決辦法

iOS照相機獲取到的圖片自動旋轉90度解決辦法

情景再現:

    iOS開發過程中,要實現用用手機攝像頭拍一張照片,經過裁剪壓縮,然後發出去。結果發出去的圖片始終是逆時針旋轉了90度的圖片。

事出有因:

    相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation屬性是3,即UIImageOrientationRight。如果這個圖片直接使用則沒事,但是如果對它進行裁剪、縮放等操作後,它的這個imageOrientation屬性會變成0。此時這張圖片用在別的地方就會發生旋轉。imageOrientation是隻讀的,不能直接修改其值。

解決辦法:

1. 設定相機的一個屬性allowsEditing為YES,設了這個值,你拍完照片後會在照片上出現一個框框,這就是對照片的裁剪編輯。在相機的代理方法中取照片的時候就別用UIImagePickerControllerOriginalImage來取了,要用UIImagePickerControllerEditedImage。用這個key取出來的照片,它的imageOrientation是0,所以之後的任何裁剪、縮放操作都不會造成旋轉。這是第一種方法。


2.有時候你的需求是要照相結果的原圖。那麼,就要對圖片進行手動旋轉。這裡有一個專門針對這個事的很好的category。

- (UIImage *)fixOrientation:(UIImage *)aImage {
    
    // No-op if the orientation is already correct
    if (aImage.imageOrientation == UIImageOrientationUp) 
        return aImage;
    
    // We need to calculate the proper transformation to make the image upright.
    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
    CGAffineTransform transform = CGAffineTransformIdentity;
    
    switch (aImage.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;
            
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
            transform = CGAffineTransformRotate(transform, M_PI_2);
            break;
            
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
            transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
        default:
            break;
    }
    
    switch (aImage.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
            
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
        default:
            break;
    }
    
    // Now we draw the underlying CGImage into a new context, applying the transform
    // calculated above.
    CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
                                             CGImageGetBitsPerComponent(aImage.CGImage), 0,
                                             CGImageGetColorSpace(aImage.CGImage),
                                             CGImageGetBitmapInfo(aImage.CGImage));
    CGContextConcatCTM(ctx, transform);
    switch (aImage.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            // Grr...
            CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
            break;
            
        default:
            CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
            break;
    }
    
    // And now we just create a new UIImage from the drawing context
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage *img = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return img;
}

這個分類是根據圖片的imageOrientation屬性,對它進行旋轉。這個方法比較費記憶體。

相關推薦

iOS拍照之後圖片自動旋轉90解決辦法

今天開發一個拍照獲取照片的功能的時候, 發現上傳之後圖片會自動旋轉90. 測試發現, 只要是圖片大於2M, 系統就會自動翻轉照片   相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的im

iOS照相機獲取到的圖片自動旋轉90解決辦法

情景再現:     iOS開發過程中,要實現用用手機攝像頭拍一張照片,經過裁剪壓縮,然後發出去。結果發出去的圖片始終是逆時針旋轉了90度的圖片。 事出有因:     相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalIma

iOS開發技巧之:相機獲取到的圖片自動旋轉90解決辦法

本文轉載自這裡:http://blog.csdn.net/hitwhylz/article/details/39518463 今天寫demo的時候發現, 如果把通過相機獲取到的圖片,直接進行操作, 比如裁剪, 縮放, 則會把原圖片向又旋轉90度。 剛開始覺得莫名其妙, 不知所措。 後來百度了

iOS開發- 相機 攝像頭 獲取到的圖片自動旋轉90解決辦法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

IOS上傳豎向圖片旋轉90解決辦法

原因:iOS手機豎著拍出的照片被添加了一個順時針旋轉90°的拍照方向; 解決:讀取圖片的拍照方向資訊,糾正至正確的方向。 參考地址:http://code.ciaoca.com/javascript/exif-js/ 獲取圖片Orientation引數,=6是正

js canvas 圖片resize 旋轉90示例

function resize(img, canvas) { var oriW = img.width; var oriH =

解決部分android手機照片被系統自動旋轉90

使用某星手機有為應用的相簿新增圖片時,發現照片已被旋轉,APP沒有做任何處理,因此肯定是手機在拍照儲存的時候做的手腳。 1、呼叫方法 int degree = ImageUtil.getBitmapDegree(imageInfo.getImgSour

關於android中呼叫系統拍照,返回圖片旋轉90..

由於專案的需要,沒有自定義拍照功能,僅僅呼叫了系統的拍照程式..但是出現了一個問題,就是拍照完成顯示圖片居然是被旋轉的圖片....解決辦法:/** * 獲取圖片的旋轉角度,有些系統把拍照的圖片旋轉了,有的沒有旋轉 */ int degree

三星手機拍照,上傳照片或者下載導致圖片旋轉90°的解決辦法

專案需求。 因為專案中需要對拍照之後的圖片進行上傳。 (這也是一個簡單的問題) 但是就是三星手機(三星note3),出現拍照之後照片旋轉了九十度。 然後我們上傳上去,然後通過其他手機請求url再次顯示還是旋轉過的。 說說我們解決問題的路徑。

蘋果手機(ios)拍照上傳圖片旋轉90問題---java後臺處理

需要先匯入包 metadata-extractor-2.3.1.jar 地址 https://github.com/drewnoakes/metadata-extractor/releases?after=2.7.0 xmpcore-5.1.2.jar 依賴包 maven下載 med

iOS 解決圖片上傳後逆時針旋轉90的問題

寫一個分類: #import "UIImage+Orientation.h" @implementation UIImage (Orientation) + (UIImage *)fixOrientation:(UIImage *)aImage {

關於阿里雲oss上傳圖片之後會被旋轉90解決辦法

問題描述:正常的圖片前端上傳到oss成功之後的資源地址。在html上引用的時候被旋轉了90度oss資源地址直接在瀏覽器開啟就不會旋轉問題原因:某些手機拍攝出來的照片可能帶有旋轉引數(存放在照片exif資訊裡面)。而oss資源上傳之後會預設自適應方向所以在img標籤中圖片就被旋轉了90度。 解決辦法:阿里雲給

IOS 圖片自動旋轉

+ (UIImageView *)rotate360DegreeWithImageView:(UIImageView *)imageView{     CABasicAnimation *animation = [ CABasicAnimation          

opencv3 圖片旋轉90

利用仿射變換實現圖片順時針旋轉90度,程式碼如下 #include<opencv.hpp> #include<iostream> using namespace std; int main() { int b = 0, g = 0, r = 255;

Android拍照後獲得的圖片旋轉90問題

最近一直在做一個掃描的專案,用zxing實現二維碼的掃描,需求要實現拍照並且掃描名片,發現拍照出來的照片是旋轉的。一直找原因找不到,在國外一個論壇看到說是camera獲取data資料是橫向的,沒有經過處理所以顯示就是旋轉的。想了好久還是不會實現data的旋轉,索性就將bit

圖片的每點選一次旋轉90, filter和css3屬性

<!DOCTYPE html> <html>     <head>         <title> ImageRotation </title>         <meta http-equiv="Conte

怎樣把PDF圖片旋轉90

src 圖片文件 下載 本地文件 sha mark 90度 快的 mage 有些時候我們在網上下載的PDF圖片文件,在瀏覽的時候是豎著的,但是下載之後,方向就變得亂七八糟,看著很是別扭。我們現在都喜歡正直的東西,像這樣方向亂的圖片我們也不行使用,所以要怎麽樣把它旋轉回到原位

如何將PDF圖片旋轉90,盤點這個小方法

幫助 來看 狀態 搜索 src 拖拽 vpd 網上 看看吧 很多時候我們在網上下載的PDF文件中有很多圖片都是倒著的,這就需要將圖片旋轉過來使用,那麽如何將PDF文件中圖片旋轉90度?今天就來為大家盤點這個小方法,一起來看看吧。1、我們大家肯定都使用PDF圖片,但是不一定使

day4 二維數組旋轉90

維數 div 而已 tro alt logs ron mage 重要 二維數組的旋轉其實就是數組裏面的元素對調的情況;下面有一個4×4的二維數組,[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],現在要

AndroidOpenCV攝像頭預覽旋轉90問題

將下圖檔案中的  deliverAndDrawFrame 方法 修改為 protected void deliverAndDrawFrame(CvCameraViewFrame frame){    Mat modified;