2011-07-13 18 views
8

iPhone'da NSData'yı doğrudan fotoğraf kitaplığına kaydetmek için assest kitaplığını kullanarak modifikasyonlarla (görüntü kodundan sonra veri ekleme) fotoğraf arşivine bir resim kaydettim. Şimdi, görüntüyü okumak için bir NSData olarak fotoğraf kitaplığından okumak istiyorum. Bir UIImage olarak okursam, resmin içindeki verileri değiştirir.iPhone, fotoğraf arşivinden NSData olarak nasıl bir görüntü okuyor?

Fotoğrafı, fotoğraf kitaplığından NSData olarak nasıl okuyabilirim? 4.1'de referans URL’yi aramayı denedim, ancak şans yok.

Düzenleme: Neden bir NSData olarak kaydettirdiğimi açıklamak için düzenledim. Cevapları URL yöntemi sadece saf NSData istiyorsanız, ancak ben soruyorum bağlamında yardımcı olmazsa çalışır.

Düzenleme 2: GetBytes ile yanıt, benim için yapılan yanıttı. Ben kullanılan kod oldu:

int8_t *bytes = malloc([representation size]); 
NSUInteger length = [representation getBytes:bytes fromOffset:0 length:[representation size] error:&error]; 

Bu bana bana görüntü kodunu PLUS ne ben NSData biçiminde ilave verdi dosyanın içine her şeyi elde edebildi.

Düzenleme 3:

AssetLibrary yerini PHPhotoLibrary ile iOS 10'da şimdi bunu yapmanın bir yolu var mı? Hiçbir değişiklik yapmadan orijinal RAW imajı olan NSData'daki görüntüye ihtiyacım var.

+0

sonra neden bir NSData olarak kaydedin fotoğraf kütüphanesine görüntüyü kaydetmek isterseniz? UIimage olarak kaydedin. –

+0

Görüntü etiketinin sona ermesinden sonra görüntüdeki gizli iletileri eklediğim için onu NSData olarak kaydediyorum. – SolidSnake4444

cevap

3

Sen ALAssetRepresentation ait getBytes yöntem haline bakmak gerekir. Bu, görüntünüzün orijinal RAW görüntü verisini sağlar ve aynı zamanda görüntüyü bir kerede belleğe okumak yerine görüntüyü işlemek için bir arabellek kullanmayı mümkün kılar. Ve elbette her zaman getBytes yönteminden NSData oluşturabilirsiniz.

Alkış,

Hendrik

+0

Apple, onlara sorduğumda bundan bahsetmişti, nereden başlayacağınıza dair bir fikre sahip olabileceğim herhangi bir kod örneği verebilir misiniz? Eklediğim iletinin resim verisinden daha uzun olması nedeniyle, getBytes yöntemindeki uzunluğu nasıl tanımlardım. Dosya uzunluğu değişkeninin sonu var mı? – SolidSnake4444

+0

Nvm, Orijinal yazımı çalıştığım kod örneğiyle güncelledim. Öneri için çok teşekkür ederim. Bu cevapların ikisi de görüntü seçiciden alınan bir görüntüden bana NSData verdiler, ancak bu sadece görüntüyü sadece NSData'ya değil tüm dosyaya verebildi. – SolidSnake4444

+0

Bunu iOS 10'da AssetLibrary'in yerini alan PHPhotoLibrary kullanarak nasıl yapacağınızı bilmiyorum. – SolidSnake4444

1

zaten ALAsset, aşağıdaki kullanarak varsayılan temsilinin bir NSData almak mümkün olmalıdır varsa:

NSData *data = [NSData dataWithContentsOfURL:[[asset defaultRepresentation] url]]; 
+1

Bu bana görüntünün NSData'sını verir, ancak görüntü kodu bittikten sonra görüntünün sonuna eklenen NSData'dan kurtulur. Eklenen verilerin bilgisayarda e-posta ile gönderildiği ve bir metin dosyası olarak görüntülendiğinde göründüğü gibi olduğunu biliyorum. Ancak, kodunuz bir görüntü seçici görüntüsünün NSData sürümünü verir, bu nedenle görüntü seçicideki bir görüntüden NSData'ya ihtiyaç duyan herkes için bu yöntem işe yarayacaktır. Ancak aradığım şey bağlamında bu işe yaramıyor. Tam dosyayı nasıl alacağınıza dair herhangi bir fikriniz varsa bana bildirin. – SolidSnake4444

İlgili konular