为什么图像的base64格式在swift 3中是白色的?

问题描述:

我用下面的代码转换了我的图像,这将返回我的图像的base64,但问题是,当我将它们上传到服务器时,我只看到白色图像 - 你能否告诉我更好的方法来将图像转换为base64或者这是我选择这里 最好的办法是转换图像的base64为什么图像的base64格式在swift 3中是白色的?

func base64(from image: UIImage) -> String? { 
    UIGraphicsBeginImageContext(image.size) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    let imageData = UIImageJPEGRepresentation(image!, 1.0) 
    if let imageString = imageData?.base64EncodedString(options: .endLineWithLineFeed) { 
     return imageString 
    } 
    return nil 
} 
+0

一两件事你可以做的是从中产生以base64字符串构成图象回来,如果工作检查压缩图像并检查字符串是否正确发送,因为base64字符串是s ize太大。 – YaBoiSandeep

,因为没有什么是在当前上下文得出它是白色的!

你只是UIGraphicsBeginImageContext与大小

UIGraphicsGetImageFromCurrentImageContext

它会永远给你一个白色图像获取和有使用Base64

没有关系

如果你想呈现的东西,然后用像低于

 yourImageView.layer.render(in: UIGraphicsGetCurrentContext()!) 

以及之后从currentContext获取图像

编辑

func base64(from image: UIImage) -> String? { 
    UIGraphicsBeginImageContext(image.size) 
    image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    let imageData = UIImageJPEGRepresentation(image!, 1.0) 
    if let imageString = imageData?.base64EncodedString(options: .endLineWithLineFeed) { 
    return imageString 
    } 
    return nil 
    } 
+0

swift说UIImage的值没有成员层 –

+0

这不是UIImage它应该是UIImageView –

+0

我有一个UIImage数组而不是图像视图 –

试试这个方法:

func convertImageToBase64(_ image:UIImage) -> String 
    { 
    let imageData = UIImageJPEGRepresentation(image, 1)//get imageData from image 
    if(imageData != nil) 
    { 
     let Strbase64 = imageData?.base64EncodedString(options: .endLineWithCarriageReturn)//encode imageData 
     return Strbase64!//return encoded string 
    } 
    return "" 
    } 
+0

这个代码将工作,但是当我在服务器上载两个图像只是第一个图像是存在第二图像是在服务器中却是0 KB –

+0

我想你需要一些延迟后转换为Base64和再转换第二图像 –

+0

不,你转换为base64时不需要任何延迟。这个关于第二张图像是空图像的问题可能是完全不相关的。 – Rob

你通过了UIImage这种方法,但从来没有用它做了什么,而是用UIGraphicsGetImageFromCurrentImageContext创建了一个新UIImage,但你从来没有画过任何东西。这就是为什么产生的图像是白色的。

但你根本不需要那些UIGraphics调用。只要抓住你传入此方法的UIImage的JPEG表示,并将其转换为一个基地64编码字符串:

func convertImageToBase64(_ image: UIImage) -> String? { 
    return UIImageJPEGRepresentation(image, 1)?.base64EncodedString() 
} 
+0

这不是工作仰望就像我在其他问题评论说,答案是工作,但不超过一个图像 –

+0

,多个图像的问题不是该转换为base64。以上是你如何做转换,并没有太多的。多重图像问题或者是如何抓住这些多个“UIImage”引用,或者如何保存它们或者类似的东西。但是,在您的问题中,您没有提供足够的信息来帮助我们诊断这种次要的多重图像问题。 – Rob

+0

@SaeedRahmatolahi - 顺便说一句,在注释中另一个答案,你说你从手机拍照。如果使用'UIImagePickerController',例如,它是低效率的抢'UIImage'目的,将它们转换为'Data' /'NSData',然后做底座64的转换。通常你会想抓住原来'Data' /'NSData'资产(如https://stackoverflow.com/a/32938728/1271826)。但没有更多的上下文,我们无法帮助你。 – Rob

首先请检查是否你所面对的错误是从你的应用程序或服务器端。您可以选择网的base64到图像转换.Copy您的base64字符串,并首先检查他们,你可以选择此链接

https://codebeautify.org/base64-to-image-converter