Swift UIImage等于
我需要检查加载到Swift UIImage等于,swift,uiimage,Swift,Uiimage,我需要检查加载到UIImage对象文件中的文件是否等于另一个图像,如果是,则执行一些操作。不幸的是,它不起作用 emptyImage = UIImage(named: imageName) if(image1.image != emptyImage) { // do something } else { // do something } 上述代码始终输入if分支。您不能使用来比较两个UIImage对象=或=运算符,一个选项是使用UIImagePNGRepresentatio
UIImage
对象文件中的文件是否等于另一个图像,如果是,则执行一些操作。不幸的是,它不起作用
emptyImage = UIImage(named: imageName)
if(image1.image != emptyImage) {
// do something
} else {
// do something
}
上述代码始终输入
if
分支。您不能使用来比较两个UIImage
对象=
或=
运算符,一个选项是使用UIImagePNGRepresentation
将其转换为NSData
对象,如以下代码中所示:
func areEqualImages(img1: UIImage, img2: UIImage) -> Bool {
guard let data1 = UIImagePNGRepresentation(img1) else { return false }
guard let data2 = UIImagePNGRepresentation(img2) else { return false }
return data1.isEqualToData(data2)
}
我希望这对您有所帮助。您可以将
UIImage
实例转换为NSData
实例并进行比较
if let emptyImage = UIImage(named: "empty") {
let emptyData = UIImagePNGRepresentation(emptyImage)
let compareImageData = UIImagePNGRepresentation(image1.image)
if let empty = emptyData, compareTo = compareImageData {
if empty.isEqualToData(compareTo) {
// Empty image is the same as image1.image
} else {
// Empty image is not equal to image1.image
}
} else {
// Creating NSData from Images failed
}
}
您甚至可以在
UIImage
上实现相等运算符,这将在比较图像时简化您的逻辑:
func==(lhs:UIImage,rhs:UIImage)->Bool{
lhs.pngData()==rhs.pngData()
}
这也会启用
=在UIImage
上的code>操作符应该输入if语句。它不应该进入else语句。请参阅下面我的答案。您应该使用.isEqual
,而不是=
如果有人在查看Swift 3:isEqualToData
不再存在,您可以直接在2个数据
对象之间使用=
运算符,就像其他两个相同类型的变量一样。我只是想指出,我对这个答案投了反对票,因为Cristik的方法在声明两个lhsData对象时完全错了,而其中一个对象应该命名为rhsData(我知道应该命名为rhsData,因为他/她后来引用了它)。@Will这是一个复制+粘贴的打字错误,谢谢你提出来,我用正确的var名称更新了答案。对于swift 4,将UIImagePNGRepresentation(img1)替换为data1=image.pngData或data1=image.jpegData(压缩质量:0.7),我不知道为什么会发生这种情况,也不确定我是否完全正确,但如果两个图像都是空图像(例如初始化为无数据),则返回否。即使将同一个实例与自身进行比较,也不会得到任何结果