UIImage 等于

UIImage is equal to

我需要检查加载到 UIImage 目标文件中的文件是否等于另一个图像,如果是,则执行一些操作。不幸的是,它不起作用。

emptyImage = UIImage(named: imageName)

if(image1.image != emptyImage) {
    // do something
} else {
    // do something
}

以上代码总是进入if分支。

您不能使用 !=== 运算符比较两个 UIImage 对象,一种选择是使用 UIImagePNGRepresentation 将其转换为 NSData 进行比较到 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 === rhs || lhs.pngData() == rhs.pngData()
}

运算符比较 PNG 表示,如果参数指向相同的 UIImage 实例,则使用快捷方式

这还会在 UIImage 上启用 != 运算符。

请注意,.pngData 调用和 byte-to-byte 比较可能是一项耗时的操作,因此在尝试比较大图像时要小心。