我注意到,在Safari中,如果我通過Twitter共享頁面,則會生成正在共享的頁面的縮略圖。如何使用iOS爲網頁創建縮略圖?
我搜索了Google,發現AVAssetImageGenerator
包可以創建視頻縮略圖。有沒有類似的方式來創建網頁的縮略圖?
我注意到,在Safari中,如果我通過Twitter共享頁面,則會生成正在共享的頁面的縮略圖。如何使用iOS爲網頁創建縮略圖?
我搜索了Google,發現AVAssetImageGenerator
包可以創建視頻縮略圖。有沒有類似的方式來創建網頁的縮略圖?
您可以通過創建UIWebViews中的縮略圖:
UIView *newView = [view snapshotViewAfterScreenUpdates:YES];
,或者您可以使用,以及:
UIGraphicsBeginImageContextWithOptions(myView.bounds.size, NO, 0);
[myView drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
重要!如果你想創建一個UIWebView的縮略圖,你可以發現像你截圖和頁面沒有完全加載的問題,所以我建議你在頁面加載的時候做,或者,因爲我不得不做,把一個JavaScript標誌本地調用iOS,並在這個特定的時刻截圖。你可以保存縮略圖,使用你想要的機制存儲它們(例如coredata,並有一個持久的數據庫來快速訪問信息),或者你可以使用配置文件和應用程序內部文件夾的路徑,這是真的由你決定。但請記住UIWebView加載內容的時間,因爲有時候,我們會截取屏幕截圖,並且視圖中沒有任何內容,並且您將始終空白頁。 取代以下截圖:webView:shouldStartLoadWithRequest:navigationType:將其放入webViewDidFinishLoad:但請記住,這並不意味着網頁已正確加載!你可以有一個ajax事件或一個外部的javascript事件來上傳屏幕上的內容,但UIWebView可以說它已經加載時,它沒有!所以這就是使用JavaScript標誌來本地調用內部函數來截取屏幕截圖的原因。
一旦你獲得了屏幕截圖,你將不得不調整它的大小以獲得你的縮略圖。例如,你可以使用:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
(在The simplest way to resize an UIImage?找到解決方案)
但有幾個方法可以做到這一點。我認爲最好的方法是添加一個類別,並以您想要的方式調整功能。
希望它可以幫助
感謝您的回覆,我將檢查 – maple
@AlfuryDB嗨,也許我沒有描述清楚我的問題,我希望得到這個網頁的網址沒有打開它。 – maple
嗨,@alfuryDB,我誤解'SLComposeViewController',實際上,當我添加一個url [twitter addURL:url],那麼這將是一個縮略圖。 – maple