iOS圖片裁剪的一點感悟

最近在改的需求,需要裁剪圖片,然后網(wǎng)上各種搜索,終于尋得一個仿微信頭像裁剪的demo,改一改基本OK。但是第一次裁剪完的圖片有些模糊,網(wǎng)上看帖子,有人提議把UIGraphicsBeginImageContext(size);這行代碼改成如下形式:UIGraphicsBeginImageContextWithOptions(size,NO,kDeviceScale);這樣的話,加了屏幕分辨率,縮放以后準備裁剪的圖片確實不模糊了,但是誕生了一個新的問題,明明圖片已經調整到裁剪框的中心也縮放到了想要的內容范圍,但是裁剪以后的結果是只有圖片右上角的1/4,好苦逼啊,然后又是各種嘗試,各種問大神,最后又是分辨率的問題,擦,想死的節(jié)奏!記錄一下給需要用到裁剪功能的同學提個醒,與及給正在為此問題煩惱的同學予希望之光。

- (UIImage *)getSubImage {
    
    CGRect squareFrame = self.cropFrame;
    
    CGFloat scaleRatio = self.latestFrame.size.width / self.originalImage.size.width;
    CGFloat x = (squareFrame.origin.x - self.latestFrame.origin.x) / scaleRatio;
    CGFloat y = (squareFrame.origin.y - self.latestFrame.origin.y) / scaleRatio;
    CGFloat w = squareFrame.size.width / scaleRatio;
    CGFloat h = squareFrame.size.width / scaleRatio;
    if (self.latestFrame.size.width < self.cropFrame.size.width) {
        CGFloat newW = self.originalImage.size.width;
        CGFloat newH = newW * (self.cropFrame.size.height / self.cropFrame.size.width);
        x = 0; y = y + (h - newH) / 2;
        w = newH; h = newH;
    }
    if (self.latestFrame.size.height < self.cropFrame.size.height) {
        CGFloat newH = self.originalImage.size.height;
        CGFloat newW = newH * (self.cropFrame.size.width / self.cropFrame.size.height);
        x = x + (w - newW) / 2; y = 0;
        w = newH; h = newH;
    }
    //乘以圖片的分辨率,保證截到一張完整的圖(分辨率:kDeviceScale)
    CGRect myImageRect = CGRectMake(x*kDeviceScale,y*kDeviceScale, w*kDeviceScale, h*kDeviceScale);
    CGImageRef imageRef = self.originalImage.CGImage;
    CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);
    CGSize size;
    size.width = myImageRect.size.width;
    size.height = myImageRect.size.height;
    //UIGraphicsBeginImageContext(size);
    //設置圖片的分辨率,保證圖片的清晰度(kDeviceScale)
    UIGraphicsBeginImageContextWithOptions(size,NO,kDeviceScale);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawImage(context, myImageRect, subImageRef);
    UIImage *smallImage = [UIImage imageWithCGImage:subImageRef];
    CGImageRelease(subImageRef);
    UIGraphicsEndImageContext();
    return smallImage;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容