Jawaban:
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
atau
NSData *imageData = UIImagePNGRepresentation(image);
Tergantung apakah Anda ingin data Anda dalam format PNG atau format JPG.
Saat menginisialisasi UIImage
objek dengan init(data: originalData)
, itu originalData
akan diubah menjadi data mentah dalam beberapa jenis format internal. Data ini dapat diambil nanti dengan
let rawData = myImage.cgImage?.dataProvider?.data as Data?
Namun karena rawData
mentah, itu akan menjadi lebih besar daripada saat digunakan UIImagePNGRepresentation
.
Anda dapat mengharapkan bahwa UIImage adalah objek yang diformat untuk tampilan dan karenanya tidak akan menggunakan data asli (yang mungkin dalam format PNG atau JPEG) tetapi lebih mungkin berupa larik piksel atau format internal lainnya. Dengan kata lain, UIImage(data: foo)
tidak akan dipertahankan foo
.
Jika Anda hanya ingin menggunakannya di tempat lain di program Anda, UIImage asli akan baik-baik saja (saya kira sebenarnya tidak demikian di sini)
Jika Anda ingin membuat serial, UIImagePNGRepresentation(...)
akan berfungsi tetapi akan menjadi besar jika aslinya adalah JPEG; UIImageJPEGRepresentation(...)
sering kali akan menghasilkan data yang sedikit terlalu besar dan sedikit merugikan jika aslinya adalah PNG. Seharusnya tidak masalah untuk memilih satu berdasarkan cara gambar akan ditampilkan dan format yang Anda harapkan disediakan. Jika Anda kebetulan menggunakan PNG dan ingin PNG, Anda harus mendapatkan ukuran file yang bagus dan data yang hampir sama, selain potongan PNG khusus.
Jika Anda ingin mendapatkan salinan persis dari data asli (mungkin untuk menyimpan file setelah thumbnail, atau SHA1), maka Anda perlu menyimpannya secara terpisah. Anda mungkin melakukan sesuatu seperti:
var image:UIImage
var imageData:NSData {
didSet {
image = UIImage(data: imageData)
}
}
Hanya karena saya tersandung pada ini dan saya suka cepat :)
Berikut adalah terjemahan cepat dari postingan Caroiline.
var imageData = UIImagePNGRepresentation(image)
Atau
var imageData = UIImageJPEGRepresentation(image, 0.7)
Swift 4.2.0
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)
Banyak hal telah berubah sejak jawaban di atas diberikan, bagi mereka yang masih mencari karena mereka memiliki kekhawatiran yang sama dengan CipherCom: iOS 5 telah menambahkan properti CIImage .
CIImage
hanya disetel jika diinisialisasi dengan imageWithCIImage:
. Juga ini bukan data yang digunakan secara langsung melainkan objek representasi gambar lain.
UIImageJPEGRepresentation
atauUIImagePNGRepresentation
akan mengubah data dan melakukan konversi ulang. Adakah cara untuk benar-benar mencapai apa yang diminta?