NSDATA و UIIMAGE
-
05-07-2019 - |
سؤال
أحاول التحميل UIImage
اعتراض من NSData
, وكان رمز العينة NSImage
, ، أعتقد أنهم يجب أن يكونوا هم نفسه. ولكن الآن فقط تحميل الصورة ، أتساءل ما هو الأفضل لاستكشاف الأخطاء وإصلاحها UIImage
جار التحميل NSData
القضية.
المحلول
uiimage لديه -initWithData:
طريقة. من المستندات: "يجب تنسيق البيانات الموجودة في معلمة البيانات لمطابقة تنسيق الملف لأحد أنواع الصور المدعومة من النظام."
نصائح أخرى
لم أحاول UIImageJPEGRepresentation()
من قبل ، ولكن UIImagePNGRepresentation
يعمل بشكل جيد بالنسبة لي ، والتحول بين NSData
و UIImage
ميت بسيط:
NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];
جرب هذا لتحويل صورة إلى NSDATA:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
يجب أن تكون thedata NSData
الكائن الذي يحتوي بالفعل على البيانات. تحتاج إلى القيام بتحميل/تنزيل الملف إلى NSData
كائن قبل استخدامه. يمكنك فحصه باستخدام NSLog
على thedata ومعرفة ما إذا كانت تحتوي على البيانات الصحيحة.
للتنفيذ الآمن للرمز ، استخدم كتلة if-let مع البيانات ، كدالة uiimagepngrepresentation إرجاع ، قيمة اختيارية.
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
ملحوظة: بيانات هو سويفت 3 فئة. استخدم البيانات بدلاً من NSData مع Swift 3
عمليات الصور العامة (مثل PNG & JPG على حد سواء):
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
handleOperationWithData(data: data)
} else if let data:Data = UIImageJPEGRepresentation(img, 1.0) {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}
باستخدام التمديد:
extension UIImage {
var pngRepresentationData: Data? {
return UIImagePNGRepresentation(img)
}
var jpegRepresentationData: Data? {
return UIImageJPEGRepresentation(self, 1.0)
}
}
*******
if let img = UIImage(named: "Hello.png") {
if let data = img.pngRepresentationData {
handleOperationWithData(data: data)
} else if let data = jpegRepresentationData {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}