Getting image size from HTML

守給你的承諾、 提交于 2019-12-23 04:51:44

问题


I'm parsing an RSS feed from a blog, and putting the HTML of a post inside a UIWebView.

But now I would like to change the size of the images to fit the iPhone screen. I'm trying with the following replace

HTMLContent = [HTMLContent stringByReplacingOccurrencesOfString:@"width=\"480\"" withString:@"width=\"300\""];

But doing like this I'm replacing only the images with 480 width. And moreover I'm not changing the height!

Do you know if there is a way to replace any width with 300, and changing the height by the same factor?


回答1:


You can do this using a Regular Expression. You'll want to match the <img> tags within the string and extract the height and width values, then calculate your new desired height and width, and then replace the height and width in the string with the new values.

The following code should work, but it may miss some edge cases (such as if the height attribute appears before the width attribute in the img tag).

int maxWidth = 300;
NSString *originalHTML = @"<html><body><img src='image1.gif' width='4800' height='80' alt='foobar'/><img src='image1.gif' width='70000' height='99999' alt='foobar'/></body></html>";

NSString *regexPattern = @"<img[^>]*width=['\"\\s]*([0-9]+)[^>]*height=['\"\\s]*([0-9]+)[^>]*>";

NSRegularExpression *regex = 
[NSRegularExpression regularExpressionWithPattern:regexPattern 
                                          options:NSRegularExpressionDotMatchesLineSeparators 
                                            error:nil];

NSMutableString *modifiedHTML = [NSMutableString stringWithString:originalHTML];

NSArray *matchesArray = [regex matchesInString:modifiedHTML 
                                   options:NSRegularExpressionCaseInsensitive 
                                     range:NSMakeRange(0, [modifiedHTML length]) ]; 

NSTextCheckingResult *match;

// need to calculate offset because range position of matches
// within the HTML string will change after we modify the string
int offset = 0, newoffset = 0;

for (match in matchesArray) {

    NSRange widthRange = [match rangeAtIndex:1];
    NSRange heightRange = [match rangeAtIndex:2];

    widthRange.location += offset;
    heightRange.location += offset;

    NSString *widthStr = [modifiedHTML substringWithRange:widthRange];
    NSString *heightStr = [modifiedHTML substringWithRange:heightRange];

    int width = [widthStr intValue];
    int height = [heightStr intValue];

    if (width > maxWidth) {
        height = (height * maxWidth) / width;
        width = maxWidth;

        NSString *newWidthStr = [NSString stringWithFormat:@"%d", width];
        NSString *newHeightStr = [NSString stringWithFormat:@"%d", height];

        [modifiedHTML replaceCharactersInRange:widthRange withString:newWidthStr];

        newoffset = ([newWidthStr length] - [widthStr length]);
        heightRange.location += newoffset;

        [modifiedHTML replaceCharactersInRange:heightRange withString:newHeightStr];                

        newoffset += ([newHeightStr length] - [heightStr length]);            
        offset += newoffset;
    }
}

NSLog(@"%@",modifiedHTML);


来源:https://stackoverflow.com/questions/8780065/getting-image-size-from-html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!