سؤال

أحاول التحميل 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...
     }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top