Swift 如何复制UIImage?

Swift 如何复制UIImage?,swift,uiimage,Swift,Uiimage,我有一个UIImageView和一个UIImageView。我想将这些图片的副本分配给两个变量。根据用户正在做的事情,应该对图像进行操作。问题是,图像在每个变量中都是相同的。我猜,因为它们是通过引用传递的 let image1 = imageView.image! let image2 = imageView.image! 如何获得此图像的两个单独副本 谢谢大家! 编辑: 我想要实现的是:只需裁剪一个图像,保持另一个图像与原始图像一样 let imageLeft = googleImageVi

我有一个UIImageView和一个UIImageView。我想将这些图片的副本分配给两个变量。根据用户正在做的事情,应该对图像进行操作。问题是,图像在每个变量中都是相同的。我猜,因为它们是通过引用传递的

let image1 = imageView.image!
let image2 = imageView.image!
如何获得此图像的两个单独副本

谢谢大家!

编辑:

我想要实现的是:只需裁剪一个图像,保持另一个图像与原始图像一样

let imageLeft = googleImageView.image!
let imageRef = CGImageCreateCopy(googleImageView.image!.CGImage)
let imageRight = UIImage(CGImage: imageRef!, scale: googleImageView.image!.scale, orientation: googleImageView.image!.imageOrientation)

if translation.x < 0 {
    let scale = imageLeft.scale
    let newRect = CGRectMake(0, 0, (imageLeft.size.width + translation.x) * scale, imageLeft.size.height * scale)
    let imageRef = CGImageCreateWithImageInRect(imageLeft.CGImage, newRect)

    if let croppedImage = imageRef {
        googleImageView.image = UIImage(CGImage: croppedImage, scale: scale, orientation: imageLeft.imageOrientation)
    }
} 
print("left image: \(imageLeft) right image \(imageRight)")
让imageLeft=googleImageView.image!
让imageRef=CGImageCreateCopy(googleImageView.image!.CGImage)
设imageRight=UIImage(CGImage:imageRef!,比例:googleImageView.image!。比例,方向:googleImageView.image!。imageOrientation)
如果平移.x<0{
让scale=imageLeft.scale
设newRect=CGRectMake(0,0,(imageLeft.size.width+translation.x)*比例,imageLeft.size.height*比例)
让imageRef=CGImageCreateWithImageInRect(imageLeft.CGImage,newRect)
如果让croppedImage=imageRef{
googleImageView.image=UIImage(CGImage:croppedImage,缩放:缩放,方向:imageLeft.imageOrientation)
}
} 
打印(“左图像:\(图像左)右图像\(图像右)”)
上面的代码打印到控制台:

left image: <UIImage: 0x7fd020dca070>, {111, 167} 
right image <UIImage: 0x7fd020dda430>, {111, 167}
left image: <UIImage: 0x7fd020df9ba0>, {110, 167} 
right image <UIImage: 0x7fd020d45670>, {110, 167}
左图像:,{111167}
右图,{111167}
左图:,{110167}
右图,{110167}

。。。等等因此,两幅图像都有了新的尺寸。只有左边的图像应该被裁剪。

正如@Aggressor建议的那样,您可以通过以下方式从imageView复制图像:

let newCgIm = CGImageCreateCopy(imageView.image?.CGImage)
let newImage = UIImage(CGImage: newCgIm, scale: imageView.image!.scale, orientation: imageView.image!.imageOrientation)

cgImage有一个新的复制功能,它与Swift 3一起提供,也与Swift 4兼容。所以你可以用这种方式

guard let cgImage = imageView.image?.cgImage?.copy() else {
        return
    }
let newImage = UIImage(cgImage: cgImage,
                       scale: imageView.image!.scale,
                       orientation: imageView.image!.imageOrientation)

后续问题:图像被复制,但它仍然像第一个一样被操纵。知道为什么会出现这种情况吗?此代码将从
imageView
中获取图像,并将其保存到另一个
newImage
中,我不知道您正在执行什么操作。我想执行以下操作:裁剪图像1,但保留原始图像作为图像2。当我裁剪image1时,image2会被裁剪两次。我将编辑我的问题以澄清。确定,然后首先将图像复制到另一个变量中,然后执行裁剪操作。很高兴帮助您:)