1. 程式人生 > >UIWebView改變HTML中圖片的大小,進行等比例縮放

UIWebView改變HTML中圖片的大小,進行等比例縮放

http://www.lanou3g.com/bbs/forum.php?mod=viewthread&tid=5189

現在越來越多的應用採用了Hybrid App(混合模式移動應用)這種開發模式,所以我們以後可能會越來越多的和UIWebView打交道。今天分享一個在在使用UIWebView載入HTML的時候很常見的一個問題。我們在使用UIWebView載入HTMLString的過程中,一般都很頭疼HTML中圖片的自適應,一般情況下,網頁中的圖片展示到UIWebView的過程中都需要調整圖片的大小,網上常見的程式碼如下:

[Objective-C] 純文字檢視 複製程式碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 // 攔截網頁圖片  並修改圖片大小 [webView stringByEvaluatingJavaScriptFromString: @"var script = document.createElement('script');" "script.type = 'text/javascript';" "script.text = \"function ResizeImages() { " "var myimg,oldwidth;" "var maxwidth=300;" // UIWebView中顯示的圖片寬度 "for(i=0;i <document.images.length;i++){"
"myimg = document.images;" "if(myimg.width > maxwidth){" "oldwidth = myimg.width;" "myimg.width = maxwidth;" "myimg.height = myimg.height * (maxwidth/oldwidth);" // 導致我們計算錯誤的地方 "}" "}" "}\";" "document.getElementsByTagName('head')[0].appendChild(script);"]; [webView stringByEvaluatingJavaScriptFromString:
@"ResizeImages();"];

但是我們在使用這個方法的過程中,會出現圖片的寬度是我們設定的寬度,但是圖片的高度比我們想得到的高度要小,最終的效果是圖片被壓縮了,達不到我們等比例縮放的效果。
這是因為在HTML中,如果你更改了圖片的高度(寬度)之後,圖片的寬度(高度)會自己進行等比例的縮放,如果我們設定圖片的寬和高,那麼圖片的寬和高就是我們設定的值。
舉例來說,比如網頁裡面的圖片的寬高是600*400,如果我們在上面的程式碼中把圖片寬度設定成300,那麼這個時候圖片的高自動就變成了200,如果我們在使用上面的程式碼,乘以我們計算到的縮放係數也就是2/3,那麼最後圖片的高度就是200 * 0.666667,這樣我們最後看到圖片就被壓縮了。
如果想要得到正確的高度,那麼只需要使用下面的程式碼:
[Objective-C] 純文字檢視 複製程式碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 [webView stringByEvaluatingJavaScriptFromString: @"var script = document.createElement('script');" "script.type = 'text/javascript';" "script.text = \"function ResizeImages() { " "var myimg,oldwidth;" "var maxwidth = 300.0;" // UIWebView中顯示的圖片寬度 "for(i=0;i <document.images.length;i++){" "myimg = document.images[i];" "if(myimg.width > maxwidth){" "oldwidth = myimg.width;" "myimg.width = maxwidth;" "}" "}" "}\";" "document.getElementsByTagName('head')[0].appendChild(script);"]; [webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];

這樣就能達到我們等比例縮放HTML中圖片的效果了。