简体   繁体   中英

Convert UIImage to byte array in swift

如何将 UIimage 转换为字节数组,以便将其上传到我的 Web 服务中?

You can actually use a couple of lines to do it

guard let image = UIImage(named: "someImage"),
      let data = image.jpegData(compressionQuality: 1.0) else { return }

// OR

guard let image = UIImage(named: "someImage"),
      let data = image.pngData() else { return }

The number should range from 0.0 to 1.0 and sets the jpeg quality. PNG is lossless so there is no need for compression quality identifier but be aware that the file size can be about 10 times higher

--- update ---

Updated for Swift 5.1

You can convert UIImage to NSData and pass it to this method

func getArrayOfBytesFromImage(imageData:NSData) -> NSMutableArray
{

    // the number of elements:
    let count = imageData.length / sizeof(UInt8)

    // create array of appropriate length:
    var bytes = [UInt8](count: count, repeatedValue: 0)

    // copy bytes into array
    imageData.getBytes(&bytes, length:count * sizeof(UInt8))

    var byteArray:NSMutableArray = NSMutableArray()

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

    return byteArray


}

Swift 5, iOS 14 version based on toofani answer, minimal changes

func getArrayOfBytesFromImage(imageData:NSData) -> Array<UInt8>
{

  // the number of elements:
  let count = imageData.length / MemoryLayout<Int8>.size

  // create array of appropriate length:
  var bytes = [UInt8](repeating: 0, count: count)

  // copy bytes into array
  imageData.getBytes(&bytes, length:count * MemoryLayout<Int8>.size)

  var byteArray:Array = Array<UInt8>()

  for i in 0 ..< count {
    byteArray.append(bytes[i])
  }

  return byteArray


}

So a complete sequence looks like this... assuming I got a UIImage I extract the data and then recombine it.

let data = imageX.pngData()
bytes = getArrayOfBytesFromImage(imageData: data! as NSData) 
let datos: NSData = NSData(bytes: bytes, length: bytes.count)
newImage = UIImage(data: datos as Data) // Note it's optional. Don't force unwrap!!!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM