如何在 Swift 4 中将 UIImage 转换为字节数组

Posted

技术标签:

【中文标题】如何在 Swift 4 中将 UIImage 转换为字节数组【英文标题】:How can I convert UIImage to Byte Array In Swift 4 【发布时间】:2018-07-14 07:06:04 【问题描述】:

我正在尝试将 UIimage 转换为 swift 中的字节数组。我搜索了很多,但解决方案要么太旧(对于 swift 2)要么不起作用。 有谁知道这样做的方法?! 谢谢

【问题讨论】:

【参考方案1】:

上面的解决方法不正确,逐字节复制非常慢 一张大图需要 4 秒,以下是 0.02 秒(来自 Swift3 的新构造函数)

 let data: [UInt8] = [...]
 let image = UIImage(data: Data(bytes: data, count: data.count))

 guard let dataPng: Data = image.pngData() else  return [] 
 let finalData = [UInt8](dataPng)

【讨论】:

你的pngData()是什么? 感谢发现,我漏了一个字:image.pngData()【参考方案2】:

试试这个!!

guard let image = UIImage(named: "someImage") else  return  

let data = UIImageJPEGRepresentation(image, 1.0)

OR you can convert UIImage to NSData

func getArrayOfBytesFromImage(imageData:NSData) -> NSMutableArray


    // the number of elements:
    let count = data.length / MemoryLayout<UInt8>.size

    // create array of appropriate length:
    var bytes = [UInt8](repeating: 0, count: count)
    // copy bytes into array
    imageData.getBytes(&bytes, length:count)

    var byteArray:NSMutableArray = NSMutableArray()

    for (var i = 0; i < count; i++) 
        byteArray.addObject(NSNumber(unsignedChar: bytes[i]))
    

    return byteArray

【讨论】:

我试过了,虽然 sizeof(UInt8) 不再可用,有什么想法吗?! print("bit width: \(UInt8.bitWidth) memory layout: \(MemoryLayout&lt;UInt8&gt;.size)") 显示:bit width: 8 memory layout: 1 这个方法太慢了!

以上是关于如何在 Swift 4 中将 UIImage 转换为字节数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CIFilter 在 Swift 中将 UIImage 转换为灰度?

试图在 Swift 5.1 中将 UIImage 转换为 PFFileObject

在 Swift 中将字节数组转换为 UIImage

如何在 swift 中将 UIImage 中的 PDF 放入 PDFView 中?

在for循环中将PFFile数组转换为UIImage返回空数组Swift

将UIImage转换为NSData并在Swift中转换回UIImage?