簡體   English   中英

從 UIImageView 獲取縮放圖像

[英]Get zoomed image from UIImageView

我在 UIScrollView 中使用 UIImageview 來讓用戶捏合和縮放圖像。 我現在想獲取用戶修改過的圖像(小或放大)。 我怎樣才能做到這一點?

謝謝。

好的,現在正在嘗試新的東西。 我可以從介於兩者之間的某個圖像中獲取縮略圖嗎? 我可以從 (0,0) 獲取固定大小的縮略圖。 我可以從 (10, 20) 或 (30, 30) 得到它嗎? 再次感謝。 我嘗試將 CGImageCreateWithImageInRect 與具有這些 x 和 y 值的矩形一起使用。 但它給了我一個從 0,0 點開始的圖像

當你在 UIScrollView 中縮放 UIImageView 對象時,你只會改變 UIImageView 框架,但圖像屬性中的 UIImage 保持不變。

如果您只想在其他 UIImageView 中顯示此圖像縮放,則不應更改 UIImage 大小,只需將新的 UIImageView 框架設置為與 UIScrollView 中縮放的 UIImageView 框架相同並使用相同的圖像:

UIImageView * ImageViewOnScroll;
//set image and zoom it
... 
UIImageView * newImageView = [[UIImageView alloc] initWithImage:ImageViewOnScroll.image];
newImageView.frame = ImageViewOnScroll.frame;

如果由於某種原因你想創建新的 UIImage 改變大小,你可以使用以下簡單的方法來實現:

UIImage * resizeImage(UIImage * img, CGSize newSize){
    UIGraphicsBeginImageContext(newSize);

    //or other CGInterpolationQuality value
    CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationDefault);

    [img drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

我通過創建一個很小的UIImage擴展(兼容 Swift 5.2)解決了這個問題,當你將UIImageView嵌入到UIScrollView時,它可以完美地工作:

extension UIImage {

    func crop(from scrollView: UIScrollView) -> UIImage? {
            let zoom: CGFloat = 1.0 / scrollView.zoomScale
            let xOffset: CGFloat = (size.width / scrollView.contentSize.width) * scrollView.contentOffset.x
            let yOffset: CGFloat = (size.height / scrollView.contentSize.height) * scrollView.contentOffset.y

            let cropRect = CGRect(xOffset * scale, yOffset * scale, size.width * zoom * scale, size.height * zoom * scale)

            guard let croppedImageRef = cgImage?.cropping(to: cropRect) else { return nil }
            let croppedImage = UIImage(cgImage: croppedImageRef, scale: scale, orientation: imageOrientation)

            return croppedImage
    }

}

使用它來放大圖像的一部分:

let croppedImage = sourceImage.crop(from: scrollView)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM