1. 程式人生 > >iOS 手機照片上傳伺服器方向不對的原因以及解決方法

iOS 手機照片上傳伺服器方向不對的原因以及解決方法

蘋果手機上傳圖片到伺服器,發現圖片方向不對,實踐發現:

1:原因:  相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation屬性是3,即UIImageOrientationRight。如果這個圖片直接使用則沒事,但是如果對它進行裁剪、縮放等操作後,它的這個imageOrientation屬性會變成0。此時這張圖片用在別的地方就會發生旋轉。(手機豎著拍則為UIImageOrientationRight,手機橫著拍為UIImageOrientationUp

2:  imageOrientation是隻讀的,不能直接修改其值。

解決方法:

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

2.由於開發中經常要對原圖進行裁剪和壓縮,所以第一種方法就不可取了,於是用第二種方法

//調整圖片方向

+ (UIImage *)fixOrientation:(

UIImage *)srcImg {

if (srcImg.imageOrientation ==UIImageOrientationUp) return srcImg;

CGAffineTransform transform =CGAffineTransformIdentity;

switch (srcImg.imageOrientation) {

caseUIImageOrientationDown:

caseUIImageOrientationDownMirrored:

            transform = CGAffineTransformTranslate(transform, srcImg.

size.width, srcImg.size.height);

            transform = CGAffineTransformRotate(transform,M_PI);

break;

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

            transform = CGAffineTransformTranslate(transform, srcImg.size.width,0);

            transform = CGAffineTransformRotate(transform,M_PI_2);

break;

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

            transform = CGAffineTransformTranslate(transform,0, srcImg.size.height);

            transform = CGAffineTransformRotate(transform, -M_PI_2);

break;

caseUIImageOrientationUp:

caseUIImageOrientationUpMirrored:

break;

    }

switch (srcImg.imageOrientation) {

caseUIImageOrientationUpMirrored:

caseUIImageOrientationDownMirrored:

            transform = CGAffineTransformTranslate(transform, srcImg.size.width,0);

            transform = CGAffineTransformScale(transform, -1,1);

break;

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRightMirrored:

            transform = CGAffineTransformTranslate(transform, srcImg.size.height,0);

            transform = CGAffineTransformScale(transform, -1,1);

break;

caseUIImageOrientationUp:

caseUIImageOrientationDown:

caseUIImageOrientationLeft:

caseUIImageOrientationRight:

break;

    }

CGContextRef ctx =CGBitmapContextCreate(NULL, srcImg.size.width, srcImg.size.height,

CGImageGetBitsPerComponent(srcImg.CGImage),0,

CGImageGetColorSpace(srcImg.CGImage),

CGImageGetBitmapInfo(srcImg.CGImage));

CGContextConcatCTM(ctx, transform);

switch (srcImg.imageOrientation) {

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

CGContextDrawImage(ctx,CGRectMake(0,0,srcImg.size.height,srcImg.size.width), srcImg.CGImage);

break;

default:

CGContextDrawImage(ctx,CGRectMake(0,0,srcImg.size.width,srcImg.size.height), srcImg.CGImage);

break;

    }

CGImageRef cgimg =CGBitmapContextCreateImage(ctx);

UIImage *img = [UIImageimageWithCGImage:cgimg];

CGContextRelease(ctx);

CGImageRelease(cgimg);

return img;

}

直接傳入圖片,得到糾正方向後的圖片

相關推薦

iOS 手機照片伺服器方向不對原因以及解決方法

蘋果手機上傳圖片到伺服器,發現圖片方向不對,實踐發現: 1:原因:  相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation屬性是3,即UIImageOrienta

iOS 拍照慢,壓縮圖片---你沒有想到的解決方法

上傳圖片的正確方式:上傳圖片到伺服器一般是將圖片NSData上傳到伺服器,伺服器返回一個圖片NSString地址,之後再將NSString的路徑轉為url並通過url請求去更新圖片(圖片此時更新的便是NSString)上傳的圖片一般壓縮方式是: NSData *eachImg

百度ueditor編輯器asp版本地配置成功伺服器不能圖片提示500錯誤的解決方法

使用百度開源ueditor編輯器不能上傳圖片並報伺服器500錯誤。 初看是 Uploader.Class 的 fs.CreateFolder( path ) 這條語句不能建立目錄,懷疑許可權問題,提供所有許可權後,依然不行。 最後參考百度官方文件將該程式碼內函式 修改A

winscp後,檔名亂碼的解決方法

前言 以前不大會用winscp, 上傳檔案到debian伺服器時,用的都是剛裝好的winscp的預設設定。 以前也用其他上傳工具傳過目錄到debian伺服器。 後來要下載已經上傳到伺服器的檔案時,發現檔名亂碼。 檔名亂碼分2種情況: 用SecureCRT連上伺服器後的控制檯上

Nginx出現413 Request Entity Too Large錯誤解決方法,phpmyadmin匯入mysql資料庫提示,您想更大的檔案/您可能想更大的檔案的解決方法

Nginx出現413 Request Entity Too Large錯誤解決方法Nginx出現的413 Request Entity Too Large錯誤,這個錯誤一般在上傳檔案的時候出現解決方法:開啟nginx主配置檔案nginx.conf,一般在/usr/local/

R 安裝包(資料)失敗時的解決方法

R中控制代碼錯誤: 提示程式碼: Error in curl::curl_fetch_memory(url, handle = handle) : Problem with the SSL CA cert (path? access rights?)| Leaving

iOS scrollview不能滑動的幾個原因解決方法

最常見的原因是 : contentSize 這個屬性,比uiscrollview的frame要小, 無需滾動, 自然就滾動不了。 scrollenabled 這個屬性,標識著是否允許滾動,要言設成yes 另外還有一些比較隱蔽的原因: 如果這個sc

安裝SQL2005出現伺服器啟動失敗或者安裝後啟動伺服器失敗的原因解決方法

紀念一下,本人在社群的第一篇部落格,在經歷了兩天無數重複的解答和失敗的嘗試後,終於找到了解決辦法,希望可以幫到其他人,同時表達一下對各社群翻來覆去的無用解答的憤慨。具體安裝過程可以參考郝斌老師的教程。點選開啟連結下面我分享一下我所經歷的失敗:安裝過程中的錯誤:1.安裝SQL時

mysql安裝不怎麼辦 mysql安裝失敗原因解決方法

困難1:MySQL 5.1 安裝過程中報apply security setting錯誤 1.解除安裝MySQL。 2.刪除目錄 C:\Documents and Settings\All Users\Application Data\MySQL。 3.重新安裝MySQL就OK啦。 困難2:MySQL提示C

安卓手機提示安裝包解析失敗的原因解決方法

4、記憶體卡問題手機記憶體卡的預設格式是FAT,如果你使用電腦將記憶體卡進行格式化時,選擇FAT32的選項,那麼這也可能導致程式安裝處問題。當然還有另外一種可能,就是記憶體卡本身有問題,這個大家試試更換一張記憶體卡試試。 如果不是記憶體卡損壞導致程式無法解析的話,大家可以在手機上對記憶體卡進行格式化(本人親測

蘋果手機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

手機壓縮 照片/刪除照片

// 生成識別碼 var dates = new Date(); var tIdentifier = dates.getTime(); var identifier = String(tIdentifier) + parseInt(Math.

手機怎麼錄照片到抖音短視訊,這個必須要知道。

經常玩抖音的朋友可能一直在好奇,有些人上傳的並不是連續的視訊,而是一張一張的照片,並且照片上還有相應的配文,其實原理和上傳的視訊是一樣的,需要提前將這些圖片做成一個圖集的視訊形式,然後在上傳到抖音,那這些圖集是怎樣錄製的呢? 方法/步驟: 1.首先先在手機設定中找

IOS 視訊伺服器

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    manager.requestSerializer.timeoutInterval = 20;    manager

調整伺服器圖片的方向

CGContextDrawImage(ctx, CGRectMake(0,0,theImage.size.height,theImage.size.width), theImage.CGImage);

Java後臺伺服器接收IOS客戶端的圖片

// 定義變數儲存圖片地址 String imagePath=""; // 接收圖片資料 (base64) String image=httpRequest.getParameter("imag

iOS app一鍵打包並伺服器

打包指令碼使用方法 1.開啟終端 2.在終端中直接拉兩個檔案路徑 到這裡就完成了一鍵打包的工作。 注: 1.中間如果出現提示下面這個錯誤: xcrun: error: unable to find utility “Pac

使用SurfaceView實現手機息屏狀態下的靜默拍照儲存,伺服器

注意:本文章只適用於技術交流,請你友好交流淨化開發環境 思考 由於谷歌強制在Android應用開發中編寫拍照程式是必需要有影象預覽的。這對那些惡意程式比如Android中氾濫的Service在後臺偷偷記錄手機使用者的行為與周邊資訊。這樣的門檻還包括手機

Android 語音播放和錄製以及轉換mp3,伺服器,ios親測可用

最近在做一個類似微信,QQ語音錄製,上傳資料庫,並進行播放,根據錄製的時間長短,顯示出來的語音條長短也會發生變化,以及在錄製時動畫等,以及適應iOS,對錄製的音訊,進行格式轉換. 下面就讓我們看一下具體的實現吧 先看需要新增的許可權, <uses-permiss

微信公眾號開發《四》使用微信JS-SDK實現手機圖片,支援壓縮、預覽。並下載圖片到自身伺服器

在這貼上上三篇博文連結,方便大家查閱互相學習: 本次講解微信開發第四篇:呼叫微信JS-SDK實現上傳手機圖片到伺服器,是非常常見的功能。如我們看到的使用者上傳頭像 下面是本次要實現的效果圖,支援預覽,壓縮上傳(自帶,可引數控制) 1.準備工作:工欲善其事,必先利其