2013-03-06 61 views
2

我正在编写一个应用程序,用于解析嵌入图像和数据的HTML字符串。我可以使用SDWebImage来缓存图像部分以备后用,并且可以完美缓存。不过,我需要使用缓存的图像(UIImage)来替代html字符串中的src。我认为这可以用一些JavaScript代码来完成,但是当涉及到javascript和css时,我总是使用duffer。有人可以给我一些JavaScript代码来更改图像src到这个UIImage?在UIWebiew中用UIImage替换图像源

代码缓存图像:

-(NSString *)fetchImageUrlFromSummary:(NSString *)summaryData 
{ 
    NSError *error = nil; 
    NSString *urlString = [NSString string]; 
    HTMLParser *parser = [[HTMLParser alloc]initWithString:summaryData error:&error]; 
    if (error) { 
     NSLog(@"%@", error); 
     return nil; 
    } 
    HTMLNode *bodyNode = [parser body]; 
    NSArray *inputNodes = [bodyNode findChildTags:@"img"]; 
    for (HTMLNode *inputNode in inputNodes) { 
      //NSLog(@"%@", [inputNode getAttributeNamed:@"src"]); 
     if ([[inputNode getAttributeNamed:@"src"]hasSuffix:@"png"] || 
      [[inputNode getAttributeNamed:@"src"]hasSuffix:@"jpg"]|| 
      [[inputNode getAttributeNamed:@"src"]hasSuffix:@"jpeg"]) { 
      urlString = [inputNode getAttributeNamed:@"src"]; 
      [SDWebImagePrefetcher.sharedImagePrefetcher prefetchURLs:[NSArray arrayWithObject:urlString]]; 
     } 
    } 
    return urlString; 
} 

代码来设置摘要字符串中的UIWebView:

NSString *summaryString = [[NSString alloc]initWithData:[_htmlData summary] encoding:NSUTF8StringEncoding]; 
     NSString *myDescriptionHTML = [NSString stringWithFormat:@"<html><head><style type=\"text/css\"> div{text-align:justify;text-justify:inter-word;margin:auto} 
img {max-width:100%%;width:auto;height:auto;}body{font-family: Verdana;font-size: 12pt;max-width: 100%%; width:auto; height:auto;} 
<body bgcolor=\"#F5F5DC\"></style><body>%@</body></html>", summaryString]; 
     [_webView loadHTMLString:myDescriptionHTML baseURL:[NSURL URLWithString:[_htmlData originUrl]]]; 

回答

2

我最后用下面的代码固定的问题。这可能是低效的,但这是我现在所能得到的。

__block NSData *imageData = [NSData data]; 
     SDImageCache *imageCache = [SDImageCache sharedImageCache]; 
     [imageCache queryDiskCacheForKey:_articles.articleImageURL done:^(UIImage *image, SDImageCacheType cacheType) 
     { 

      imageData = UIImagePNGRepresentation(image); 
      NSMutableString *summaryString = [[NSMutableString alloc]initWithData:[_articles articleSummary] encoding:NSUTF8StringEncoding]; 
     NSString *headerString = [NSString stringWithFormat:@"<html><head><style type=\"text/css\"> div{text-align:justify;text-justify:inter-word;margin:auto}img {max-width:100%%;width:auto;height:auto;}body{font-family: Verdana;font-size: 12pt;max-width: 100%%; width:auto; height:auto;}<body bgcolor=\"#F5F5DC\"></style><body>"]; 
     if (image) { 
      NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img[^>]*>" 
                        options:NSRegularExpressionCaseInsensitive 
                         error:nil]; 
      [regex replaceMatchesInString:summaryString 
            options:0 
            range:NSMakeRange(0, summaryString.length) 
           withTemplate:@""]; 

      NSString *imageSource = [NSString stringWithFormat:@"data:image/png;base64,%@",[imageData base64Encoding]]; 
      NSString *imageSOruceWithTag = [NSString stringWithFormat:@"<img src='%@' />", imageSource]; 
      NSMutableString *myDescriptionHTML = [NSMutableString stringWithFormat:@"%@%@%@</body></html>",headerString, imageSOruceWithTag,summaryString]; 
      [_webView loadHTMLString:myDescriptionHTML baseURL:[NSURL URLWithString:[_articles originUrl]]]; 
     } 
     else { 
      NSString *descriptionHTML = [NSString stringWithFormat:@"%@%@</body></html>",headerString,summaryString]; 
      [_webView loadHTMLString:descriptionHTML baseURL:[NSURL URLWithString:[_articles originUrl]]];