2009-02-01 30 views
5

Tôi có một chương trình iPhone có UIImage. UIImage này cần phải được chuyển đến một đối tượng Hình ảnh javascript trong một UIWebView. Tôi đã suy nghĩ điều này có thể được thực hiện bằng cách sử dụng một url dữ liệu tôi gửi đến UIWebView như thế này:URL dữ liệu/PNG từ UIImage

[wview stringByEvaluatingJavaScriptFromString:@"loadimage('%d')",dataurlfromuiimage]; 

Vì vậy, tôi cần phải chuyển UIImage của tôi vào một dữ liệu: URL. Tôi có thể tự làm điều này nếu tôi có thể lấy dữ liệu PNG, nhưng tôi cũng không thể tìm ra cách thực hiện điều đó. Nếu có một cách tốt hơn để gửi điều này đến WebView, điều đó cũng sẽ tốt.

Trả lời

22

Để có được một đại diện NSData hình ảnh của bạn trong định dạng PNG, sử dụng

NSData *dataForPNGFile = UIImagePNGRepresentation(yourImage); 

Tương tự như vậy, một đại diện JPEG có thể thu được bằng

NSData *dataForJPEGFile = UIImageJPEGRepresentation(yourImage, 0.9f); 

khi bạn có NSData, bạn có thể viết nó vào thư mục tài liệu của bạn sử dụng writeToFile: nguyên tử :, và sau đó tôi tin rằng bạn có thể vượt qua nó như một URL địa phương (mặc dù tôi đã không cố gắng này). Một cách khác là sử dụng danh mục Base64 NSData mà François P. tham chiếu và bằng cách nào đó gửi nó tới JavaScript như Base64.

+1

Bạn có thể không muốn sử dụng phương pháp base64 + javascript cho hình ảnh lớn vì sử dụng nhiều bộ nhớ - Safari sẽ giữ cả hai phiên bản base64 và giải mã được tải. Nên hoạt động tốt cho hình ảnh nhỏ hoặc nếu bạn chỉ có một vài hình ảnh lớn – rpetrich

0

Thật không may, bạn sẽ cần phải chuyển đổi UIImage của bạn thành biểu diễn tệp hình ảnh của bạn, chứ không phải thông tin pixel được giải mã được lưu trữ trong cấu trúc UIImage. Tức là, bạn sẽ cần bằng cách nào đó ghi nó vào một tệp tạm thời và nhận các byte NSData thô cho tệp (có lẽ là JPEG ou PNG). Sau đó, sử dụng bộ mã hóa BASE64. Tôi không nghĩ rằng nó đã được cung cấp bởi Apple, vì vậy bạn muốn có thể nhìn vào bài viết này: http://www.cocoadev.com/index.pl?BaseSixtyFour