2012-01-08 22 views
0

私はブログからRSSフィードを解析し、投稿のHTMLをUIWebViewに入れています。HTMLから画像サイズを取得する

しかし、私はiPhoneの画面に合わせて画像のサイズを変更したいと思います。私は次のように置き換えようとしています

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

しかし、私は480の幅の画像だけを置き換えています。そして、私は身長を変えていないよ!

幅を300に置き換え、高さを同じ係数で変更する方法があるかどうか知っていますか?

答えて

3

これは、正規表現を使用して行うことができます。文字列内の<img>タグを一致させ、高さと幅の値を抽出し、新しい目的の高さと幅を計算してから、文字列の高さと幅を新しい値に置き換えます。

次のコードは機能するはずですが、(たとえば、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); 
関連する問題