Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从UIImagePickerController拾取时的UIImage大小变化_Ios_Objective C_Iphone_Uiimage_Uiimagepickercontroller - Fatal编程技术网

Ios 从UIImagePickerController拾取时的UIImage大小变化

Ios 从UIImagePickerController拾取时的UIImage大小变化,ios,objective-c,iphone,uiimage,uiimagepickercontroller,Ios,Objective C,Iphone,Uiimage,Uiimagepickercontroller,从UIImageController拾取图像并计算其大小时,图像大小会发生变化,即磁盘中的图像大小不同 有没有办法得到合适的尺寸 我试过的- 使用UIImagePngRepresentation和UIImageJPEGRepresentation将图像转换为数据。这种方法的问题是什么- a。这种方法消耗内存,所以看起来不太好 b。大小不同,我可以理解它将图像转换为数据,然后计算大小,所以大小不同 但无论我搜索了什么,每一个被接受的答案都只是围绕这一点 使用ALAssetsLibrary获取映像大

UIImageController
拾取图像并计算其大小时,图像大小会发生变化,即磁盘中的图像大小不同

有没有办法得到合适的尺寸

我试过的-

  • 使用
    UIImagePngRepresentation
    UIImageJPEGRepresentation
    将图像转换为数据。这种方法的问题是什么-
  • a。这种方法消耗内存,所以看起来不太好

    b。大小不同,我可以理解它将图像转换为数据,然后计算大小,所以大小不同

    但无论我搜索了什么,每一个被接受的答案都只是围绕这一点

  • 使用
    ALAssetsLibrary
    获取映像大小,但由此计算的大小也与磁盘大小不匹配
  • 我使用了以下方法-
    assetForURL:resultBlock:^(ALAsset*asset)failureBlock:

  • 使用
    CGImageRef
    方法
    CGImageGetBytesPerRow
    ,但这也不会给出期望的结果
  • 还有我错过的其他方法吗

    编辑-

    这是尺寸差异-

    当我在finder中检查图像大小时-5.3MB

    当我使用检查UIImage对象大小时-

    UIImageJPEG表示法(image.1.0)-2.29 MB


    当我使用ALAsset Library-4.4 MB检查图像大小时,我需要类似的东西,但遇到了相同的问题。事实证明,稍微调整一下质量因子就能让这一切顺利进行

    UIImageJPEGRepresentation(image, 0.67)
    
    理想情况下,
    质量
    应为
    1.0
    ,以便以最精确的形式计算图像大小。结果表明,它为1.0质量提供了异常大的值


    我在任何地方都找不到这一文档,必须将上述解决方案保留在我的照片应用程序中。对于我的用例,它一直运行良好。这并不理想,您可能需要进一步调整它以最适合您的用例。

    我遇到了一个问题,捕获图像的图像大小太大,我无法管理它,因此我必须将其调整到所需的大小。。。我在这里添加代码

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        dispatch_async(dispatch_get_main_queue(), ^{
        for(UIView *v in imgView.subviews) {
            [v removeFromSuperview];
        }
        CGSize newSize=CGSizeMake(200, 200);
        UIImage *image = [info valueForKey: UIImagePickerControllerOriginalImage];
        UIGraphicsBeginImageContext(newSize);
        [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [imgView setImage:newImage];
    
        [self.view layoutIfNeeded];
        [self.navigationController dismissViewControllerAnimated: YES completion: nil];
        });
    }
    

    UIImageJPEGresentation&UIImagePngRepresentation对图像使用不同的压缩方法和比率,这就是为什么会得到不同大小的图像

    另外,ALAssetLibrary对图像使用不同的图像压缩方法,这就是为什么每次都会得到不同大小的图像


    只需使用三种方法中的任何一种来获得图像大小,不要试图比较它们。因为这三种方法都使用各自的图像压缩方法。

    与文章中的其他答案一样,在比较磁盘文件大小和内存文件大小时,不同的图像读取技术会导致不同的大小

    我建议你看看这篇文章。用户正在使用NSFileSize属性读取磁盘上的“实际”大小

    我冒昧地说,由于用于表示内存中的映像和存储在磁盘上的映像的备份机制,磁盘上的内容与内存中的大小之间始终存在大小差异


    你可能想改变你的方法。如果您的目标是确定内存中的图像“大小”,那么您必须根据所使用的压缩机制来测量图像的大小。如果您的目标是确定文件在磁盘上时的“大小”,那么我建议让操作系统为您提供有关磁盘上映像的元数据(NSFileSize)。同样,根据用于将图像保存到磁盘的压缩技术,大小比较也会有所不同。使用NSFileSize将使用压缩技术为您提供磁盘上图像“实际”大小的最终答案,即JPEG、PNG等。

    您是否考虑过这个因素@itechnician我没有在系统之间移动文件,我所做的是从iPhone摄像头捕获图像,在Mac上导入,在Mac上检查图像大小,但是我从UIImage计算出来的尺寸变化很大。实际的图像尺寸和你计算出来的尺寸是多少,你能发布变化吗too@itechnician-查看上面编辑的帖子。在
    MAC
    its
    PNG
    JPG
    中导入图像时,我可以知道吗?由于文件类型直接影响图像大小,所以请查看上面编辑的文章,您是否遇到过此类问题。与此不同。但确实,文件大小存在异常大的差异。在我的例子中,几乎所有的图像都是JPEG格式的,即照相机拍摄的照片。我只能为UIImageJPEGRepresentation确认这一点。你读过这个问题了吗,我的问题是尺寸变化,以及我特别提到的以MB为单位的尺寸变化。磁盘大小与UIImage对象的大小。