获取 UIImage 的大小(字节长度)而不是高度和宽度
我正在尝试获取 UIImage
的长度。不是图像的宽度或高度,而是数据的大小。
I'm trying to get the length of a UIImage
. Not the width or height of the image, but the size of the data.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
UIImage
的基础数据可能会有所不同,因此对于同一“图像”,可以具有不同大小的数据。您可以做的一件事是使用UIImagePNGRepresentation
或UIImageJPEGRepresentation
获取两者的等效NSData
构造,然后检查其大小。The underlying data of a
UIImage
can vary, so for the same "image" one can have varying sizes of data. One thing you can do is useUIImagePNGRepresentation
orUIImageJPEGRepresentation
to get the equivalentNSData
constructs for either, then check the size of that.使用 UIImage 的 CGImage 属性。然后结合使用CGImageGetBytesPerRow *
CGImageGetHeight,添加UIImage的大小,应该在实际大小的几个字节之内。
如果您想将其用于诸如 malloc 之类的目的,这将返回未压缩的图像大小,以准备位图操作(假设 4 字节像素格式为 3 字节用于 RGB,1 字节用于 Alpha):
Use the CGImage property of UIImage. Then using a combination of CGImageGetBytesPerRow *
CGImageGetHeight, add in the sizeof UIImage, you should be within a few bytes of the actual size.
This will return the size of the image, uncompressed, if you want to use it for purposes such as malloc in preparation for bitmap manipulation (assuming a 4 byte pixel format of 3 bytes for RGB and 1 for Alpha):
Swift 中的示例:
Example in Swift:
以下是获得答案的最快、最干净、最通用且最不容易出错的方法。在类别
UIImage+MemorySize
中:或者如果您只想要实际的位图而不是 UIImage 实例容器,那么它确实如此简单:
This following is the fastest, cleanest, most general, and least error-prone way to get the answer. In a category
UIImage+MemorySize
:Or if you only want the actual bitmap and not the UIImage instance container, then it is truly as simple as this:
斯威夫特3:
Swift 3:
斯威夫特 4 & 5:
Swift 4 & 5:
我不确定你的情况。如果您需要实际的字节大小,我认为您不会这样做。您可以使用 UIImagePNGRepresentation 或 UIImageJPEGRepresentation 来获取图像压缩数据的 NSData 对象。
我想你想获得未压缩图像的实际大小(像素数据)。您需要将 UIImage* 或 CGImageRef 转换为原始数据。这是将 UIImage 转换为 IplImage(来自 OpenCV)的示例。您只需要分配足够的内存并将指针传递给 CGBitmapContextCreate 的第一个参数。
I'm not sure your situation. If you need the actual byte size, I don't think you do that. You can use UIImagePNGRepresentation or UIImageJPEGRepresentation to get an NSData object of compressed data of the image.
I think you want to get the actual size of uncompressed image(pixels data). You need to convert UIImage* or CGImageRef to raw data. This is an example of converting UIImage to IplImage(from OpenCV). You just need to allocate enough memory and pass the pointer to CGBitmapContextCreate's first arg.
SWIFT 4+
您可以使用此技巧来找出图像大小。
SWIFT 4+
you can use this trick to find out image size.
我尝试使用获取图像大小
,但它给出的图像大小小于图像的实际大小。然后我尝试使用 PNG 表示来获取大小。
但它给出的字节数比实际图像大小更多。
唯一对我来说完美的东西。
I tried to get image size using
but it gives less than the actual size of image. Then i tried to get size using PNG representation.
but it gives more byte counts than the actual image size.
The only thing that worked perfectly for me.
如果需要人类可读的形式,我们可以使用 ByteCountFormatter
其中
Int64(data. count)
是您需要的数字格式。If needed in human readable form we can use ByteCountFormatter
Where
Int64(data.count)
is what you need in numeric format.