【问题标题】:Convert UIImage into bytes将 UIImage 转换为字节
【发布时间】:2011-07-01 09:57:32
【问题描述】:

我正在使用 UIImagePickerController 获取 UIImage。如何计算该图像以 kb/mb 为单位保存的字节数?

使用该值,我必须制定用户无法添加超过 1MB 大小的图像的逻辑

【问题讨论】:

    标签: iphone uiimageview byte uiimagepickercontroller nsdata


    【解决方案1】:

    当然可以。将UIImage 转换为NSData 对象,该对象具有length 属性,它将为您提供以字节为单位的大小。然后,您可以轻松计算所需的任何单位的大小。

    例如:

        UIImage *img = [UIImage imageNamed:@"some.png"];
        NSData *dataObj = UIImageJPEGRepresentation(img, 1.0);
        int bytes = [dataObj length];
        //convert into whatever unit you need
    

    【讨论】:

    • 你也可以使用UIImagePNGRepresentation(img)
    • 当然 - 我不知道他更喜欢哪一个,但这是一个很好的观点。 +1
    • @AvtarGuleria - 当你这样做时,你正在编码然后解码图像,你的结果数据可以增长到原始文件的两倍!如果您使用 ALAssetsLibrary 类,您可以获得原始的 NSData,这将是您期望的大小。
    • @AaronBrager 感谢您的建议,很快就会尝试。
    【解决方案2】:

    您可以通过以下 UIImagePickerController 的委托方法获取图像大小

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{
         if([UIImageJPEGRepresentation(image, 1.0) length]> MAX_SIZE)
         {
             //Code here
         }
    }
    

    这里,你可以看到,我已经把Image转换成数据了,[数据长度]可以给出字节长度。

    【讨论】:

      【解决方案3】:

      与其阻止用户上传超过 1MB 的图像,不如通过缩放和压缩图像来更好地为用户服务,以节省我怀疑的空间。但是,要回答您的问题,一种方法就是;

      -(void)imagePickerController:(UIImagePickerController *) picker didFinishPickingMediaWithInfo:(NSDictionary *) info {
      
      
      NSData *imageData = UIImagePNGRepresentation(image); // Or UIImageJPEGRepresentation 
      long sizeInBytes = [imageData length];
      
      // do stuff
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-06
        • 2017-01-06
        • 2011-11-03
        相关资源
        最近更新 更多