2012-01-12 19 views
15

ile doğru şekilde çalışmaz. I akımının, fotoğrafları almak için ALAsssetsLibrary kullanan bir uygulaması var. Fotoğrafı bir resim görünümüne yerleştirdim ve sunucuya yükleyebiliyorum. Bazı fotoğrafları çektikten sonra gerçek cihazda test ettiğimde, Portre'de çekilmesi gereken fotoğrafların bir manzara olduğunu öğrendim.Oryantasyon, ALAsset

Dolayısıyla, böyle CGImage almak için farklı bir işlevi olarak adlandırılan:

UIImage *image = [UIImage imageWithCGImage:[representation fullResolutionImage] scale:1.0 orientation:(UIImageOrientation)[representation orientation]]; 

denedik, bunu kullandım ilk: Ben ölçek ve yönlendirme ile bir verebilir düşünce

UIImage *image = [UIImage imageWithCGImage:[representation fullResolutionImage]] 

Fotoğrafın çekildiği doğru yönelim. Ama bana doğru çözümü vermedi.

Fotoğrafın doğru bir şekilde oluşturulması için gerekli olan her şeyi özledim mi?

+1

Bu sorun, aygıttan alınan fotoğraflar ile ortaya çıkar – Leena

cevap

44

Doğru yönlendirme işlemi kullanmakta olduğunuz iOS sürümüne bağlıdır. iOS4 ve iOS 5'de küçük resim zaten doğru bir şekilde döndürülür, böylece herhangi bir döndürme parametresi belirtmeden UIImage'ınızı başlatabilirsiniz. Ancak fullScreenImage için, davranış her bir iOS sürümü için farklıdır. IOS 5'te, görüntü iOS 4'te değil zaten döndürülüyor.

Yani iOS4 üzerinde kullanmalısınız:

ALAssetRepresentation *defaultRep = [asset defaultRepresentation]; 
UIImage *_image = [UIImage imageWithCGImage:[defaultRep fullScreenImage] 
                scale:[defaultRep scale] orientation:(UIImageOrientation)[defaultRep orientation]]; 

iOS5 üzerinde aşağıdaki kodu doğru çalışması gerekir:

ALAssetRepresentation *defaultRep = [asset defaultRepresentation]; 
UIImage *_image = [UIImage imageWithCGImage:[defaultRep fullScreenImage] scale:[defaultRep scale] orientation:0]; 

Şerefe,

Hendrik

+0

Benim durumumda tam Çözünürlük Görüntülemesine ihtiyacım vardı ve iOS 6 ve 7'de test ettim. Görüntü otomatik olarak döndürülmedi, ancak ilk örnek kod hile yapıyor! Teşekkürler adam! P.S. görüntüyü meta verilerle dosyaya kaydederken dikkatli olun. Görüntüyü döndürdüyseniz, garip döndürülmüş jpeg'leri önlemek için EXIF ​​yönünü 0 olarak ayarlamanız gerekir;) – Primoz990

+0

Yorumumu düzeltmem gerekir. İlk kod örneği, tam Çözünürlük resmimi döndürmedi, onu kendi kendime döndürmem gerekiyordu. Ancak, fullScreenImage'ın iOS 6 ve 7'de otomatik olarak döndüğüne katılıyorum. – Primoz990

+0

Harika! IOS 7 ile de benim için çalışıyor! Çok teşekkürler ! – Vinestro

4

bu kodu deneyin: -

UIImage* img = [UIImage imageWithCGImage:asset.thumbnail]; 
img = [UIImage imageWithCGImage:img.CGImage scale:1.0 orientation:UIImageOrientationUp]; 

Bu size yardımcı olabilir.

+0

Aygıtın sahibi olmadığımdan şimdi deneyemiyorum. Bana şu iki kod satırını açıklar mısın? İlk satırdaki img, varlığın küçük resmi, ancak gerçek resmin değil. – LittleFunny

+0

Resmin küçük resmini kullandım ve görüntünün yönünü yukarı doğru tuttum, böylece benim durumumda çalışacak şekilde döndürülemeyecek. – Leena

+0

Belki farklı bir sorunum var ... Ama yardımınız için teşekkürler – LittleFunny

3

Benim deneyim sınırlıdır IOS 5.x ancak küçük resim ve tam ekran görüntülerin pro odaklı olduğunu söyleyebilirim. perly. Dikey olarak çekildiğinde yatay olan tam çözünürlük.

http://www.catamount.com/forums/viewtopic.php?f=21&t=967&start=0

Böyle bir UIImage güzel bir döner yöntem sağlar: fullResolutionImage için

 UIImage *tmp = [UIImage imageWithCGImage:startingFullResolutionImage]; 
     startingFullResolutionImage = [[tmp imageRotatedByDegrees:-90.0f] CGImage]; 
+0

Sadece yeni görüntüyü kullandım ve benim için çalıştı. Teşekkürler. – Ali

0

, İsterdim Çözümümün Burada aldığım UIImage bir kategori kullanmaktır aşağıdaki gibi

ALAssetRepresentation *rep = [asset defaultRepresentation]; 

// First, write orientation to UIImage, i.e., EXIF message. 
UIImage *image = [UIImage imageWithCGImage:[rep fullResolutionImage] scale:rep.scale orientation:(UIImageOrientation)rep.orientation]; 
// Second, fix orientation, and drop out EXIF 
if (image.imageOrientation != UIImageOrientationUp) { 
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); 
    [image drawInRect:(CGRect){0, 0, image.size}]; 
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    image = normalizedImage; 
} 
// Third, compression 
NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 

imageData

ne istediğiniz, bir çözüm sağlamak ve sadece fotoğraf sunucusuna yükleyebilirsiniz için.

Bu arada, EXIF'in yararlı olduğunu düşünüyorsanız, normalizedImage'u istediğiniz gibi tamamlayabilirsiniz.

İlgili konular