swift UIImage转换成base64

iOS 码拜 9年前 (2015-05-11) 1784次浏览 0个评论
 

  swift UIImage转换成base64                   求帮助                     

20分
// 先获取图片的 data
let imageData = UIImagePNGRepresentation(self.image)
// 把 data 转成 Base64 的 string
let string = imageData.base64EncodedStringWithOptions(.allZeros)
引用 1 楼 zhangao0086 的回复:
// 先获取图片的 data
let imageData = UIImagePNGRepresentation(self.image)
// 把 data 转成 Base64 的 string
let string = imageData.base64EncodedStringWithOptions(.allZeros)

选择本地图片
var c=UIImagePickerController()
c.sourceType=UIImagePickerControllerSourceType.PhotoLibrary
c.delegate=self
self.presentViewController(c, animated: true, completion: nil)

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        var image:UIImage=info[UIImagePickerControllerOriginalImage] as! UIImage
        //我把image转换成base64通过webservice保存到数据库,但是图片转化后的base64太大了,是不是image太大了,要如何修改小一点
} 

引用 2 楼 lfqyusw 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:
// 先获取图片的 data
let imageData = UIImagePNGRepresentation(self.image)
// 把 data 转成 Base64 的 string
let string = imageData.base64EncodedStringWithOptions(.allZeros)

选择本地图片
var c=UIImagePickerController()
c.sourceType=UIImagePickerControllerSourceType.PhotoLibrary
c.delegate=self
self.presentViewController(c, animated: true, completion: nil)

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        var image:UIImage=info[UIImagePickerControllerOriginalImage] as! UIImage
        //我把image转换成base64通过webservice保存到数据库,但是图片转化后的base64太大了,是不是image太大了,要如何修改小一点
} 

那就用这个函数 
UIImageJPEGRepresentation(image, 0.5) 
代替
UIImagePNGRepresentation
UIImageJPEGRepresentation 能压缩图片质量

引用 3 楼 zhangao0086 的回复:
Quote: 引用 2 楼 lfqyusw 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:
// 先获取图片的 data
let imageData = UIImagePNGRepresentation(self.image)
// 把 data 转成 Base64 的 string
let string = imageData.base64EncodedStringWithOptions(.allZeros)

选择本地图片
var c=UIImagePickerController()
c.sourceType=UIImagePickerControllerSourceType.PhotoLibrary
c.delegate=self
self.presentViewController(c, animated: true, completion: nil)

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        var image:UIImage=info[UIImagePickerControllerOriginalImage] as! UIImage
        //我把image转换成base64通过webservice保存到数据库,但是图片转化后的base64太大了,是不是image太大了,要如何修改小一点
} 

那就用这个函数 
UIImageJPEGRepresentation(image, 0.5) 
代替
UIImagePNGRepresentation
UIImageJPEGRepresentation 能压缩图片质量

我用你说的方法现在把数据保存好了,然后再读取出来从Base64到UIImage
我是这样解析的:
var data=NSData(base64EncodedString: “base64字符串” , options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
结果data值为nil,请问怎么割情况,那地方弄错了

引用 4 楼 lfqyusw 的回复:
Quote: 引用 3 楼 zhangao0086 的回复:
Quote: 引用 2 楼 lfqyusw 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:
// 先获取图片的 data
let imageData = UIImagePNGRepresentation(self.image)
// 把 data 转成 Base64 的 string
let string = imageData.base64EncodedStringWithOptions(.allZeros)

选择本地图片
var c=UIImagePickerController()
c.sourceType=UIImagePickerControllerSourceType.PhotoLibrary
c.delegate=self
self.presentViewController(c, animated: true, completion: nil)

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        var image:UIImage=info[UIImagePickerControllerOriginalImage] as! UIImage
        //我把image转换成base64通过webservice保存到数据库,但是图片转化后的base64太大了,是不是image太大了,要如何修改小一点
} 

那就用这个函数 
UIImageJPEGRepresentation(image, 0.5) 
代替
UIImagePNGRepresentation
UIImageJPEGRepresentation 能压缩图片质量

我用你说的方法现在把数据保存好了,然后再读取出来从Base64到UIImage
我是这样解析的:
var data=NSData(base64EncodedString: “base64字符串” , options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
结果data值为nil,请问怎么割情况,那地方弄错了

options 的值要对应的,建议你都用 .allZeros

引用 5 楼 zhangao0086 的回复:
Quote: 引用 4 楼 lfqyusw 的回复:
Quote: 引用 3 楼 zhangao0086 的回复:
Quote: 引用 2 楼 lfqyusw 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:
// 先获取图片的 data
let imageData = UIImagePNGRepresentation(self.image)
// 把 data 转成 Base64 的 string
let string = imageData.base64EncodedStringWithOptions(.allZeros)

选择本地图片
var c=UIImagePickerController()
c.sourceType=UIImagePickerControllerSourceType.PhotoLibrary
c.delegate=self
self.presentViewController(c, animated: true, completion: nil)

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        var image:UIImage=info[UIImagePickerControllerOriginalImage] as! UIImage
        //我把image转换成base64通过webservice保存到数据库,但是图片转化后的base64太大了,是不是image太大了,要如何修改小一点
} 

那就用这个函数 
UIImageJPEGRepresentation(image, 0.5) 
代替
UIImagePNGRepresentation
UIImageJPEGRepresentation 能压缩图片质量

我用你说的方法现在把数据保存好了,然后再读取出来从Base64到UIImage
我是这样解析的:
var data=NSData(base64EncodedString: “base64字符串” , options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
结果data值为nil,请问怎么割情况,那地方弄错了

options 的值要对应的,建议你都用 .allZeros

都设成.allZeros我试了,data的值时nil

decode 时,options 传这个:NSDataBase64DecodingOptions(rawValue: 0)
//create image instance
//with image name from bundle
var image : UIImage = UIImage(named:”imageNameHere”)!
var imageData = UIImagePNGRepresentation(image)

//OR with path
var url:NSURL = NSURL(string : “urlHere”)!
var imageData:NSData = NSData.dataWithContentsOfURL(url, options: nil, error: nil)
Encoding

let base64String = imageData.base64EncodedStringWithOptions(.allZeros)
println(base64String)
Decoding

let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.fromRaw(0)!)
var decodedimage = UIImage(data: decodedData)
println(decodedimage)
yourImageView.image = decodedimage as UIImage

如果你的图片是从网上获取的已经Base64过的,可能用的 Base64 算法和你的不一样,或者说服务器做过特殊处理
引用 9 楼 zhangao0086 的回复:

如果你的图片是从网上获取的已经Base64过的,可能用的 Base64 算法和你的不一样,或者说服务器做过特殊处理

我找到问题了,我转换为base64后,通过webservice保存到数据库,结果把base64里面的+号都变成空格了,这个要怎么解决
访问webservice是用NSURLConnection.sendAsynchronousRequest

引用 10 楼 lfqyusw 的回复:
Quote: 引用 9 楼 zhangao0086 的回复:

如果你的图片是从网上获取的已经Base64过的,可能用的 Base64 算法和你的不一样,或者说服务器做过特殊处理

我找到问题了,我转换为base64后,通过webservice保存到数据库,结果把base64里面的+号都变成空格了,这个要怎么解决
访问webservice是用NSURLConnection.sendAsynchronousRequest

看这个贴:http://stackoverflow.com/questions/5628738/strange-base64-encode-decode-problem

引用 11 楼 zhangao0086 的回复:
Quote: 引用 10 楼 lfqyusw 的回复:
Quote: 引用 9 楼 zhangao0086 的回复:

如果你的图片是从网上获取的已经Base64过的,可能用的 Base64 算法和你的不一样,或者说服务器做过特殊处理

我找到问题了,我转换为base64后,通过webservice保存到数据库,结果把base64里面的+号都变成空格了,这个要怎么解决
访问webservice是用NSURLConnection.sendAsynchronousRequest

看这个贴:http://stackoverflow.com/questions/5628738/strange-base64-encode-decode-problem

看了,没整明白要如何解决

引用 12 楼 lfqyusw 的回复:
Quote: 引用 11 楼 zhangao0086 的回复:
Quote: 引用 10 楼 lfqyusw 的回复:
Quote: 引用 9 楼 zhangao0086 的回复:

如果你的图片是从网上获取的已经Base64过的,可能用的 Base64 算法和你的不一样,或者说服务器做过特殊处理

我找到问题了,我转换为base64后,通过webservice保存到数据库,结果把base64里面的+号都变成空格了,这个要怎么解决
访问webservice是用NSURLConnection.sendAsynchronousRequest

看这个贴:http://stackoverflow.com/questions/5628738/strange-base64-encode-decode-problem

看了,没整明白要如何解决

把+号先替换成别的字符,再调用webservice,获取的时候再替换回来;或者这样,因为+被编码成了这样的””%2B””空格,你通过这个代码解码回来:
NSString *decodedString = [string stringByRemovingPercentEncoding]

引用 13 楼 zhangao0086 的回复:
Quote: 引用 12 楼 lfqyusw 的回复:
Quote: 引用 11 楼 zhangao0086 的回复:
Quote: 引用 10 楼 lfqyusw 的回复:
Quote: 引用 9 楼 zhangao0086 的回复:

如果你的图片是从网上获取的已经Base64过的,可能用的 Base64 算法和你的不一样,或者说服务器做过特殊处理

我找到问题了,我转换为base64后,通过webservice保存到数据库,结果把base64里面的+号都变成空格了,这个要怎么解决
访问webservice是用NSURLConnection.sendAsynchronousRequest

看这个贴:http://stackoverflow.com/questions/5628738/strange-base64-encode-decode-problem

看了,没整明白要如何解决

把+号先替换成别的字符,再调用webservice,获取的时候再替换回来;或者这样,因为+被编码成了这样的””%2B””空格,你通过这个代码解码回来:
NSString *decodedString = [string stringByRemovingPercentEncoding]

非常感谢你的帮助,现在已经可以了,我在服务端把空格重新替换成+号了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明swift UIImage转换成base64
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!