第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iOS圖像方向行為異常

iOS圖像方向行為異常

呼啦一陣風 2019-11-07 13:08:44
在過去的幾周中,我一直在用Objective-C處理圖像,并注意到許多奇怪的行為。首先,像其他許多人一樣,我一直遇到這個問題,即用相機拍攝的圖像(或用別人的相機拍攝并發(fā)給我的彩信)旋轉(zhuǎn)了90度。我不確定為什么在世界上發(fā)生這種情況(因此提出了我的問題),但是我能夠提出一個廉價的解決方案。我這次的問題是為什么會這樣?蘋果為什么要旋轉(zhuǎn)圖像?當我將相機正面朝上拍攝照片時,除非執(zhí)行上述代碼,否則在保存照片時會旋轉(zhuǎn)保存?,F(xiàn)在,我的解決方法在幾天前還可以。我的應用程序修改了圖像的各個像素,特別是PNG的Alpha通道(因此,對于我的方案,任何JPEG轉(zhuǎn)換都從窗口中拋出)。幾天前,我注意到即使使用了變通方法代碼,即使在應用中正確顯示了圖像,當我的算法修改圖像的各個像素時,它仍認為圖像是旋轉(zhuǎn)的。因此,它不會修改圖像頂部的像素,而是會修改圖像側(cè)面的像素(因為它認為應該旋轉(zhuǎn)像素)!我不知道如何旋轉(zhuǎn)內(nèi)存中的圖像-理想情況下,我寧愿只擦除該imageOrientation標志。這也讓我感到困惑。當我拍攝照片時,將imageOrientation其設(shè)置為3。我的解決方法代碼足夠聰明,可以實現(xiàn)并翻轉(zhuǎn)它,因此用戶不會注意到。另外,我將圖像保存到庫中的代碼實現(xiàn)了這一點,將其翻轉(zhuǎn)然后保存,以使其正確顯示在相機膠卷中。該代碼如下所示:NSData* pngdata = UIImagePNGRepresentation (self.workingImage); //PNG wrap UIImage* img = [self rotateImageAppropriately:[UIImage imageWithData:pngdata]];   UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);當我將此新保存的圖像加載到我的應用程序中時,其imageOrientation值為0-正是我要查看的圖像,甚至不需要運行旋轉(zhuǎn)解決方法(請注意:從互聯(lián)網(wǎng)加載圖像而不是使用相機拍攝的圖像時) ,imageOrientation則始終為0,從而獲得完美的行為)。由于某種原因,我的保存代碼似乎清除了該imageOrientation標志。我希望竊取該代碼,并在用戶拍攝照片并將其添加到應用程序后立即使用它擦除我的imageOrientation,但它似乎不起作用。有UIImageWriteToSavedPhotosAlbum什么特別之處imageOrientation嗎?解決此問題的最佳方法是imageOrientation在用戶完成拍攝圖像后立即吹走。我認為蘋果的旋轉(zhuǎn)行為是有原因的,對吧?少數(shù)人認為這是蘋果的缺陷。(...如果您還沒有迷路,請注意...)注2:當我拍攝水平照片時,一切似乎都可以正常工作,就像從互聯(lián)網(wǎng)上拍攝的照片一樣)在對這個問題進行了所有評論之后,這就是我的想法... iPhone拍攝了一張圖像,并說“要正確顯示此圖像,必須將其旋轉(zhuǎn)90度”。此信息將在EXIF數(shù)據(jù)中。(我不知道為什么它需要旋轉(zhuǎn)90度,而不是默認為筆直垂直)。從這里開始,Gmail足夠聰明,可以讀取和分析該EXIF數(shù)據(jù)并正確顯示。但是,Windows不夠智能,無法讀取EXIF數(shù)據(jù),因此無法正確顯示圖像。我的假設(shè)正確嗎?
查看完整描述

3 回答

?
吃雞游戲

TA貢獻1829條經(jīng)驗 獲得超7個贊

import Darwin


class func rotateCameraImageToProperOrientation(imageSource : UIImage, maxResolution : CGFloat) -> UIImage {


? ? let imgRef = imageSource.CGImage;


? ? let width = CGFloat(CGImageGetWidth(imgRef));

? ? let height = CGFloat(CGImageGetHeight(imgRef));


? ? var bounds = CGRectMake(0, 0, width, height)


? ? var scaleRatio : CGFloat = 1

? ? if (width > maxResolution || height > maxResolution) {


? ? ? ? scaleRatio = min(maxResolution / bounds.size.width, maxResolution / bounds.size.height)

? ? ? ? bounds.size.height = bounds.size.height * scaleRatio

? ? ? ? bounds.size.width = bounds.size.width * scaleRatio

? ? }


? ? var transform = CGAffineTransformIdentity

? ? let orient = imageSource.imageOrientation

? ? let imageSize = CGSizeMake(CGFloat(CGImageGetWidth(imgRef)), CGFloat(CGImageGetHeight(imgRef)))



? ? switch(imageSource.imageOrientation) {

? ? case .Up :

? ? ? ? transform = CGAffineTransformIdentity


? ? case .UpMirrored :

? ? ? ? transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);

? ? ? ? transform = CGAffineTransformScale(transform, -1.0, 1.0);


? ? case .Down :

? ? ? ? transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);

? ? ? ? transform = CGAffineTransformRotate(transform, CGFloat(M_PI));


? ? case .DownMirrored :

? ? ? ? transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);

? ? ? ? transform = CGAffineTransformScale(transform, 1.0, -1.0);


? ? case .Left :

? ? ? ? let storedHeight = bounds.size.height

? ? ? ? bounds.size.height = bounds.size.width;

? ? ? ? bounds.size.width = storedHeight;

? ? ? ? transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);

? ? ? ? transform = CGAffineTransformRotate(transform, 3.0 * CGFloat(M_PI) / 2.0);


? ? case .LeftMirrored :

? ? ? ? let storedHeight = bounds.size.height

? ? ? ? bounds.size.height = bounds.size.width;

? ? ? ? bounds.size.width = storedHeight;

? ? ? ? transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);

? ? ? ? transform = CGAffineTransformScale(transform, -1.0, 1.0);

? ? ? ? transform = CGAffineTransformRotate(transform, 3.0 * CGFloat(M_PI) / 2.0);


? ? case .Right :

? ? ? ? let storedHeight = bounds.size.height

? ? ? ? bounds.size.height = bounds.size.width;

? ? ? ? bounds.size.width = storedHeight;

? ? ? ? transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);

? ? ? ? transform = CGAffineTransformRotate(transform, CGFloat(M_PI) / 2.0);


? ? case .RightMirrored :

? ? ? ? let storedHeight = bounds.size.height

? ? ? ? bounds.size.height = bounds.size.width;

? ? ? ? bounds.size.width = storedHeight;

? ? ? ? transform = CGAffineTransformMakeScale(-1.0, 1.0);

? ? ? ? transform = CGAffineTransformRotate(transform, CGFloat(M_PI) / 2.0);


? ? default : ()

? ? }


? ? UIGraphicsBeginImageContext(bounds.size)

? ? let context = UIGraphicsGetCurrentContext()


? ? if orient == .Right || orient == .Left {

? ? ? ? CGContextScaleCTM(context, -scaleRatio, scaleRatio);

? ? ? ? CGContextTranslateCTM(context, -height, 0);

? ? } else {

? ? ? ? CGContextScaleCTM(context, scaleRatio, -scaleRatio);

? ? ? ? CGContextTranslateCTM(context, 0, -height);

? ? }


? ? CGContextConcatCTM(context, transform);

? ? CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);


? ? let imageCopy = UIGraphicsGetImageFromCurrentImageContext();

? ? UIGraphicsEndImageContext();


? ? return imageCopy;

}


查看完整回答
反對 回復 2019-11-07
  • 3 回答
  • 0 關(guān)注
  • 670 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號