2017-07-27 98 views
2

我裁剪圖像有:爲什麼在使用UIGraphicsContext裁剪圖像時出現白色邊緣?

UIGraphicsBeginImageContext(croppingRect.size) 
let context = UIGraphicsGetCurrentContext() 

context?.clip(to: CGRect(x: 0, y: 0, width: rect.width, height: rect.height))   
image.draw(at: CGPoint(x: -rect.origin.x, y: -rect.origin.y)) 

let croppedImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

裁剪圖像有時對右側和底部邊框1px的白邊。右下角放大以查看各個像素的外觀如下所示。顯然邊界不是純白的,而是可能來自後期壓縮的白色陰影。

enter image description here

哪裏這個白邊神器從何而來?

+1

我已經試過你的代碼,對我來說工作得很好,你能否顯示你的矩形和croppingRect –

+0

謝謝,發現了這個問題,請看下面的答案。 – Manuel

回答

4

問題是croppingRect的值不是全像素。

作爲值xywidthheight其中計算CGFloat號碼的結果有時會是小數(例如的代替1.31.0)。解決的辦法是圓這些值:

let cropRect = CGRect(
    x: x.rounded(.towardZero), 
    y: y.rounded(.towardZero), 
    width: width.rounded(.towardZero), 
    height: height.rounded(.towardZero)) 

的圓滑必須是.towardZero(見here這是什麼意思),因爲剪切的長方形應該(通常情況下)不大於圖像矩形大。

+0

好吧!這是寶貴的提示 –

相關問題