我正在使用UIScrollView内的UIImageview,以使用户收缩和缩放图像。现在,我想获取用户已修改的图像(较小或放大)。我该怎么办?
谢谢。
好的,现在正在尝试新的东西。我可以从介于两者之间某处的图像中获取缩略图吗?我可以从(0,0)获取固定大小的缩略图。我可以说(10,20)或(30,30)吗?再次感谢。我尝试将CGImageCreateWithImageInRect与具有这些x和y值的rect一起使用。但这给了我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)