2011-01-06 75 views
2

我試圖採取一個UIView的截圖縮小到縮略圖大小用下面的代碼獲得一個調整大小的屏幕截圖,從一個UIView

UIGraphicsBeginImageContext(size); 
    [canvas.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    result = [UIGraphicsGetImageFromCurrentImageContext() retain]; 
    UIGraphicsEndImageContext(); 

上面的代碼將簡單地抓取的左上部分請使用原始非縮減尺寸查看。

我確信我以前做過這件事,但我無法讓它工作。任何人都知道這裏有什麼?

回答

7

假設你有一個CGSize origSize這是原來的尺寸(768×1024例如)和CGSize size這是所需的大小,這是可以做到像這樣:我們正在使用origSize

CGFloat scaleX = size.width/origSize.width; 
CGFloat scaleY = size.height/origSize.height; 
UIGraphicsBeginImageContextWithOptions(origSize, NO, scaleX > scaleY ? scaleY : scaleX); 
[canvas.layer renderInContext:UIGraphicsGetCurrentContext()]; 
result = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

注開始的上下文,而不是size。尺度也會影響尺寸。

更新(大約一年後):請注意,此技術會干擾UIView正在進行快照的轉換(或被其干擾)。如果以上操作不起作用,並且您正在對視圖(或其圖層)執行縮放轉換,則可能需要使用此解決方案:How to scale down a UIImage and make it crispy/sharp at the same time instead of blurry?

+0

+1太棒了! UIGraphicsBeginImageContextWithOptions僅適用於iOS 4.0及更高版本 – rjobidon 2012-02-07 04:24:40

0

我發現此解決方案會生成正確大小的縮略圖。

let thumbRect = CGRect(x: 0, y: 0, width: 512, height: 666) 
    UIGraphicsBeginImageContext(thumbSize) 
    let context = UIGraphicsGetCurrentContext()  
    self.view.frame = thumbRect 
    self.view.layer.renderInContext(context) 
    thumbImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

但是,調整大小後的圖像採用原始視圖控制器的特徵集合。 所以雖然大小是正確的,但是一些自動佈局特徵仍然在結果圖像中可見。