Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 编码/解码base64 decodedData=nil_Ios_Swift_Uiimage_Base64_Nsdata - Fatal编程技术网

Ios 编码/解码base64 decodedData=nil

Ios 编码/解码base64 decodedData=nil,ios,swift,uiimage,base64,nsdata,Ios,Swift,Uiimage,Base64,Nsdata,昨天我为此编写了一个工作代码,但我删除了它,在编写一个新代码时,有些东西真的很奇怪: 我用这种方式将其编码为图片: let pictureData = UIImagePNGRepresentation(picture!) let pictureToString64 = pictureData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) (我以前使用过JPEG

昨天我为此编写了一个工作代码,但我删除了它,在编写一个新代码时,有些东西真的很奇怪:

我用这种方式将其编码为图片:

let pictureData = UIImagePNGRepresentation(picture!)
let pictureToString64 = pictureData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
(我以前使用过JPEG表示,但它不起作用,所以我尝试使用JPEG) 我用这种方式解码,得到的是
pic64
,我相信它的值是正确的。它以iVBORw0KGgoAAAANSUhEUgAAAUAA开始(…)


问题是解码数据总是为零。为什么会发生这种情况?

我认为这与
NSDatabase64解码选项有关

使用
NSDataBase64DecodingOptions.IgnoreUnknownCharacters
而不是
NSDataBase64DecodingOptions(rawValue:0)
,我能够将Base64编码字符串解码回
NSData
,并从该数据创建一个
UIImage

let picture = UIImage(named: "myImage")

let pictureData = UIImagePNGRepresentation(picture!)

let pictureToString64 = pictureData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

let decodedData = NSData(base64EncodedString: pictureToString64!, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
let decodedImage = UIImage(data: decodedData!)
let pictureDataLocal = UIImageJPEGRepresentation(decodedImage!, 100)
NSDataBase64DecodingOptions
继承自
optionsetype
,这就是为什么您会得到原始值初始值设定项。最好使用集合类型之一,而不是传入值。我在标题中看到,
NSDataBase64DecodingOptions
是结构中唯一的公共变量,所以我尝试了它

@available(iOS 7.0, *)
public struct NSDataBase64DecodingOptions : OptionSetType {
    public init(rawValue: UInt)

    // Use the following option to modify the decoding algorithm so that it ignores unknown non-Base64 bytes, including line ending characters.
    public static var IgnoreUnknownCharacters: NSDataBase64DecodingOptions { get }
}

但是,可以使用
rawValue
,因为它是
BitwiseOperationsType
在没有元素类型集的情况下使用它将返回nil。如果rawValue实际上有一个值(例如1),那么它应该可以工作。@PauloMartins不客气!如果我的解决方案对您有所帮助,请不要忘记向其他人展示它的帮助。欢迎来到Stack Overflow。@JAL当我获得15个声誉时,我不会忘记它:)@PauloMartins接受和提升投票不同。你可以在任何声誉级别接受,这样做你自己会得到两个代表点。
@available(iOS 7.0, *)
public struct NSDataBase64DecodingOptions : OptionSetType {
    public init(rawValue: UInt)

    // Use the following option to modify the decoding algorithm so that it ignores unknown non-Base64 bytes, including line ending characters.
    public static var IgnoreUnknownCharacters: NSDataBase64DecodingOptions { get }
}