0
我正在尋找解決方案來保存UIView(及其子視圖)作爲圖像保存到設備照片庫。我想輸出圖像的大小爲1024 x 1024. UIView將始終是一個正方形,因此子視圖將適合在正方形內。結果保存的輸出必須滿足這些需求。使用UIGraphicsBeginImageContextWithOptions縮放視圖和圖像
以下是我有:
let outputSize = CGSize(width: 1024.0, height: 1024.0)
func imageWithView(view: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(outputSize, view.opaque, 0.0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: false)
let outputImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return outputImage
}
我傳遞到參數上面的視圖是方觀點。下面的截圖是結果:
在我的故事板,UIView的是方在280x280的(如果有差別。)我期望的結果是UIView的(和照片裏面它)獲取保存在黑框的全尺寸(1024平方)。謝謝您的幫助。
編輯
這裏是一個更新版本: 雖然滿足在1024平方輸出視圖的需求,質量不是非常理想。想用CGBitmapContextCreate & CGContextDrawImage方法在這裏討論:http://nshipster.com/image-resizing/
func stackOverflow() -> UIImage{
let hasAlpha = false
let scale: CGFloat = 1.0
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1024.0, 1024.0), !hasAlpha, scale)
mainView.drawViewHierarchyInRect(CGRect(origin: CGPointZero, size: CGSizeMake(1024.0, 1024.0)), afterScreenUpdates: false)
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
檢查我上面的修改。爲了滿足我的需求,我不得不調整一些東西。雖然它將最終圖像導出到1024平方米,但圖像質量並不理想。你提供的NSHipster鏈接看起來像它有一個更強大的解決方案:CGBitmapContextCreate&CGContextDrawImage - 這將允許我用CGInterpolationQuality指定質量。因爲它正在尋找一個CGImage參數,所以我很難將它導出UIView及其子視圖。你能提供關於如何使這個工作滿足上述需求的任何提示嗎?謝謝。 – Joe
實際發生了什麼?你無法將UIImage轉換爲CGImage或什麼?你可以通過'UIImage(name:「Something」)?CGImage'來完成這個任務,並按照其中的步驟進行操作。 – Dershowitz123
我得到了UIImage作爲CGImage,因此工作正常。問題是將方形UIView合併到方法中。我相信它需要被添加到CGContextDrawImage或CGBitmapCreateImage中,但我沒有試過任何有價值的結果。 – Joe