UIImage等于

Mur*_*aya 2 uiimage swift

我需要检查加载到UIImage目标文件中的文件是否等于另一个图像并执行某些操作(如果是这样).不幸的是,它没有用.

emptyImage = UIImage(named: imageName)

if(image1.image != emptyImage) {
    // do something
} else {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

上面的代码总是进入if分支.

aah*_*ens 12

您可以将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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果有人在为Swift 3看这个:`isEqualToData`不再存在,相反,你可以直接在2`Data`对象之间使用`==`运算符,就像任何其他2个相同类型的变量一样. (3认同)

Vic*_*ler 10

您无法UIImage使用!===运算符比较两个对象,一个选项是NSData使用将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)
}
Run Code Online (Sandbox Code Playgroud)

我希望这对你有帮助.

  • 对于 swift 4,将 UIImagePNGRepresentation(img1) 替换为 data1 = image.pngData 或 data1 = image.jpegData(compressionQuality: 0.7) (2认同)

Cri*_*tik 8

你可以进一步实现相等运算符的实现UIImage,这将在比较图像时简化你的逻辑:

func ==(lhs: UIImage, rhs: UIImage) -> Bool {
    if let lhsData = UIImagePNGRepresentation(lhs), let rhsData = UIImagePNGRepresentation(rhs) {
        return lhsData == rhsData
    }
    return false
}
Run Code Online (Sandbox Code Playgroud)

这也使!=操作员能够上电UIImage.