2008-11-02 41 views
58

Tôi đang cố tải đối tượng UIImage từ NSData và mã mẫu là NSImage, tôi đoán chúng phải giống nhau. Nhưng bây giờ chỉ cần tải hình ảnh, tôi tự hỏi điều gì là tốt nhất để khắc phục sự cố UIImage tải vấn đề NSData.NSData và UIImage

Trả lời

43

UIImage có phương thức - initWithData:. Từ tài liệu: "Dữ liệu trong tham số dữ liệu phải được định dạng để khớp với định dạng tệp của một trong các loại hình ảnh được hỗ trợ của hệ thống".

+0

Vâng, đó là những gì tôi đang sử dụng . NSData có địa chỉ, trong khi sau khi gọi UIImaeg -initWithData: theData, điểm trở thành 0. Tôi không chắc chắn nơi để xem thông báo lỗi. – BlueDolphin

3

theData phải là đối tượng NSData đã chứa dữ liệu. Bạn cần tải tệp/tải xuống đối tượng NSData trước khi được sử dụng. Bạn có thể kiểm tra nó bằng cách sử dụng NSLog trên theData và xem liệu nó có chứa dữ liệu hợp lệ hay không.

105

Tôi không cố gắng UIImageJPEGRepresentation() trước đó, nhưng UIImagePNGRepresentation hoạt động tốt đối với tôi, và chuyển đổi giữa NSDataUIImage là chết đơn giản:

NSData *imageData = UIImagePNGRepresentation(image); 
UIImage *image=[UIImage imageWithData:imageData]; 
21

Hãy thử này để chuyển đổi một hình ảnh để NSData:

UIImage *img = [UIImage imageNamed:@"image.png"]; 
NSData *data1 = UIImagePNGRepresentation(img); 
0

Để thực thi mã an toàn, hãy sử dụng if-let block with Data, khi hàm UIImagePNGRepresentation trả về, giá trị tùy chọn.

if let img = UIImage(named: "Hello.png") { 
    if let data:Data = UIImagePNGRepresentation(img) { 
     // Handle operations with data here...   
    } 
} 

Lưu ý: Dữ liệu là Swift 3 lớp. Sử dụng dữ liệu thay vì NSData với Swift 3

hoạt động hình ảnh Generic (như png & jpg cả hai):

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... 
    } 
} 

Bằng cách sử dụng phần mở rộng:

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... 
    } 
} 
Các vấn đề liên quan