我正在尝试做一些我认为很简单的事情,但事实并非如此简单。我有一个UIImage A,我可以从中提取NSData A.我显然可以将NSData A转回UIImage A.这不是问题。
我想要做的是将转换应用到NSData A,将其转换为NSData B,从中我可以获得UIImage B,与UIImage A不同。无论UIImage B是什么,只要它与UIImage A不同,重点是使图像A无法识别。我应该能够通过逆向转换从NSData B获得NSDAta A.所以这就是应该发生的事情:
UIImage A - > NSData A - >转换功能 - > NSData B - > UIImage B
我尝试将NSData A转换为String,然后更改String并将更改的String转换为NSData B(例如,通过将所有出现的某个字符更改为另一个字符),但这会输出无效的NSData对象。我应该尝试字节级吗?我对此并不太熟悉。如何让生成的NSData对象有效从中创建UIImage对象?
编辑:添加了有关转换类型的详细信息,以下是我尝试过的代码:
var image = UIImage(named: "image")
print("IMAGE \(image)")
var data = UIImagePNGRepresentation(image!)
print("DATA1 \(data)")
var string = data?.base64EncodedString()
print("String1 \(string)")
var newString = self.crypt(string: string!)
print("NEWSTRING \(newString)")
var newData = NSData(base64Encoded: newString, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)
print("NEWDATA \(newData)")
var newImage = UIImage(data: newData as! Data)
print("NEWIMAGE \(newImage)")
func crypt(string:String) -> String {
var cryptedString = string
var range = cryptedString.startIndex..<cryptedString.index(cryptedString.startIndex, offsetBy: 10000)
cryptedString = cryptedString.replacingOccurrences(of: "A", with: "b", options: .literal, range: range)
return cryptedString
}
我指定了一个范围,因为否则会花费太多时间。这个代码似乎在newData之后失败了(因为它不是nil),有了这条消息:
2016-09-22 03:06:42.548429 MessagesExtension[15720:3258392] [MessagesExtension] ImageIO: handle_error:349: IHDR: invalid
2016-09-22 03:06:42.548674 MessagesExtension[15720:3258392] [MessagesExtension] ImageIO: handle_error:349: IHDR: invalid
NEWIMAGE nil