Ben oluşturabilir UIImage
gelen NSData
kullanarak [UIImage imageWithData:]
veya [UIImage initWithData:]
yöntemler.
Acaba var olanın NSData
arkasını alabilir miyim UIImage
? Satırında bir şeyNSData *myData = [myImage getData];
Yanıtlar:
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
veya
NSData *imageData = UIImagePNGRepresentation(image);
Verilerinizi PNG formatında veya JPG formatında isteyip istemediğinize bağlı olarak.
Bir UIImage
nesneyi başlatırken init(data: originalData)
, bu bir originalData
tür dahili formatta ham veriye dönüştürülecektir. Bu veriler daha sonra ile alınabilir
let rawData = myImage.cgImage?.dataProvider?.data as Data?
Ancak rawData
ham olduğu için , kullanımdan daha büyük olacaktır UIImagePNGRepresentation
.
Bir UIImage'ın görüntüleme için biçimlendirilmiş bir nesne olmasını ve bu nedenle orijinal verileri (muhtemelen PNG veya JPEG biçiminde) kullanmayacağını, ancak büyük olasılıkla bir piksel dizisi veya başka bir dahili biçimi kullanmayacağını bekleyebilirsiniz. Başka bir deyişle, UIImage(data: foo)
tutmayacaktır foo
.
Bunu programınızda başka bir yerde kullanmak istiyorsanız, orijinal UIImage yeterli olacaktır (buradaki durumun aslında böyle olmadığını düşünüyorum)
Serileştirmek istiyorsanız, UIImagePNGRepresentation(...)
çalışacaktır ancak orijinal JPEG ise büyük boy olacaktır; UIImageJPEGRepresentation(...)
genellikle biraz fazla büyük verilerle sonuçlanır ve orijinaliniz PNG ise biraz kayıp olur. Görüntünün gösterilme şekline ve sağlanmasını beklediğiniz formata bağlı olarak birini seçmenizde bir sakınca yoktur. PNG'yi kullanıyorsanız ve PNG'nin çıkmasını istiyorsanız, iyi bir dosya boyutu ve hemen hemen aynı veriler, özel PNG parçaları bir kenara bırakmalısınız.
Orijinal verilerin tam bir kopyasını almak istiyorsanız (belki bir dosyayı küçük resimden sonra veya SHA1'e kaydetmek için), o zaman ayrı olarak saklamanız gerekir. Şöyle bir şey yapabilirsiniz:
var image:UIImage
var imageData:NSData {
didSet {
image = UIImage(data: imageData)
}
}
Swift 4.2
let dataPng = image.pngData() // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
let dataJpg = image.jpegData(compressionQuality: 1) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
CipherCom'un endişesini paylaştıkları için hala arayanlar için yukarıdaki cevap verildiğinden beri işler değişti: iOS 5, CIImage özelliğini ekledi .
CIImage
yalnızca ile başlatılmışsa ayarlanır imageWithCIImage:
. Ayrıca bu doğrudan kullanılan veri değil, başka bir görüntü temsil nesnesi.
UIImageJPEGRepresentation
veyaUIImagePNGRepresentation
olacak verileri değiştirebilir ve bir yeniden dönüşüm yapmak. İstenen şeyi gerçekten başarmanın bir yolu var mı?