2014年4月30日水曜日

UIWebViewへアプリ作成画像(UIImage)を入れ込む

AssetLibraryを使わず、画像などをData URI Schemeでhtmlに直接埋め込む。


- (void)changeImage:(UIImage*)image webview:(UIWebView*)webview imageDomId:(NSString*)domId {
  NSData *imageData = UIImageJPEGRepresentation(image, 0.8f);

  // iOS7以上、6以下は何かライブラリ使う
  NSString *imageBase64 = [imageData base64EncodedStringWithOptions:0];

  // encodedに改行が含まれてるとuiwebviewでエラーになるため、取り除く
  // 上記encodeメソッドで改行が含まれないのであれば不要
  imageBase64 = [imageBase64 stringByReplacingOccurrencesOfString:@"\r" withString:@""];
  imageBase64 = [imageBase64 stringByReplacingOccurrencesOfString:@"\n" withString:@""];

  [webview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"$('%@').attr('src', 'data:image/jpeg;base64,%@');", domId, imageBase64];
}


jsの変数に入れて使ったりも出来る。その場合は"data:image/[format];base64,[content]"をさらにJSONエンコードしとかないと動かないかも。