从UIImageView获取缩放图像

问题描述 投票:0回答:2

我正在使用UIScrollView内的UIImageview,以使用户收缩和缩放图像。现在,我想获取用户已修改的图像(较小或放大)。我该怎么办?

谢谢。

好的,现在正在尝试新的东西。我可以从介于两者之间某处的图像中获取缩略图吗?我可以从(0,0)获取固定大小的缩略图。我可以说(10,20)或(30,30)吗?再次感谢。我尝试将CGImageCreateWithImageInRect与具有这些x和y值的rect一起使用。但这给了我0,0

的图像
iphone uiscrollview uiimageview
2个回答
1
投票

[在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;
}

0
投票

我通过创建一个很小的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)
© www.soinside.com 2019 - 2024. All rights reserved.