Ios 如何使用';压缩编码缓冲区&x27;斯威夫特?
我正在使用Swift的压缩库将图像压缩为NSData。 代码如下:Ios 如何使用';压缩编码缓冲区&x27;斯威夫特?,ios,swift,image-compression,Ios,Swift,Image Compression,我正在使用Swift的压缩库将图像压缩为NSData。 代码如下: var imageCompressed:NSData compression_encode_buffer( imageCompressed ,800000 , imageSelected , size , NULL , COMPRESSION_LZMA ) 我收到以下错误消息: 无法将NSData类型的值转换为预期的参数类型UnsafeMutablePointer 正如Matt所说,您不能写入NSData对象,因为它是不可变的
var imageCompressed:NSData
compression_encode_buffer( imageCompressed ,800000 , imageSelected , size , NULL , COMPRESSION_LZMA )
我收到以下错误消息:
无法将NSData类型的值转换为预期的参数类型UnsafeMutablePointer
正如Matt所说,您不能写入NSData对象,因为它是不可变的。我强烈建议您改用Swift标准库
数据类型。然后,您可以使用unsafemtablebytes调用,并在其闭包内执行您想要的操作 我认为您想要的是这样的东西(imageSelected
和imagescompressed
被假定为Swift 3数据对象):
imageSelected.withUnsafeBytes{(fromBytes:UnsafePointer)->Void in
imageCompressed.WithUnsafemtableBytes{(toBytes:UnsafemtablePointer)->中的Void
压缩编码缓冲区(toBytes、toSize、fromBytes、fromSize、nil、压缩LZMA)
}
}
您无法写入NSData。它是不变的!还有-你还在使用Swift 2吗???还有,这不是一个好的图像压缩算法。根据需要使用JPEG、PNG或HEIF。您能帮助我了解压缩\编码\缓冲区的参数吗?这将是另一个问题。我想我回答了你问的问题。是的,但是什么是toBytes,toSIze,fromBytes,fromSize?请帮我解决这个withUnsafeBytes
调用一个你指定的闭包,它将指针传递到图像的原始数据缓冲区(你可以自由地将其键入任何内容,例如UInt8)。然后在闭包中使用缓冲区。这里他有两个电话fromBytes
是源图像数据toBytes
是目标缓冲区(首先需要像var-imageCompressed=Data(容量:MAX\u COMPRESSED\u SIZE)
fromSize
是以字节为单位的图像缓冲区大小,toSize
是imageCompressed
缓冲区大小(必须>=压缩所需的量)
imageSelected.withUnsafeBytes {(fromBytes: UnsafePointer<UInt8>) -> Void in
imageCompressed.withUnsafeMutableBytes {(toBytes: UnsafeMutablePointer<UInt8>) -> Void in
compression_encode_buffer(toBytes, toSize, fromBytes, fromSize, nil, COMPRESSION_LZMA)
}
}