从HTML获取图像大小

我正在parsing一个博客的RSS提要,并把一个post的HTML在一个UIWebView

但现在我想改变图像的大小,以适应iPhone屏幕。 我正在尝试用下面的replace

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

但是,这样做,我只replace480宽度的图像。 而且我没有改变身高!

你知道是否有办法用300代替任何宽度,并以相同的因子改变高度?

您可以使用正则expression式来执行此操作。 您需要匹配string中的<img>标签并提取高度和宽度值,然后计算新的所需高度和宽度,然后用新值replacestring中的高度和宽度。

下面的代码应该可以工作,但是可能会丢失一些边缘情况(例如height属性出现在img标签的width属性之前)。

 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);