2

画像とデータが埋め込まれたHTML文字列を解析するアプリケーションを作成しています。SDWebImageを使用して、後で使用するために画像部分をキャッシュすることができ、完全にキャッシュされています。ただし、html文字列のsrcの代わりに、キャッシュされた画像(UIImage)を使用する必要があります。これはいくつかのjavascriptコードで実行できると思いますが、javascriptとcssに関しては私は完全に苦手です。誰かが私に画像srcをこのUIImageに変更するためのJavaScriptコードを教えてもらえますか?

画像をキャッシュするコード:

-(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]]];
4

1 に答える 1

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]]];
于 2013-03-07T08:28:58.953 に答える