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
将图像转换为数据。这种方法的问题是什么-ALAssetsLibrary
获取映像大小,但由此计算的大小也与磁盘大小不匹配assetForURL:resultBlock:^(ALAsset*asset)failureBlock:
CGImageRef
方法CGImageGetBytesPerRow
,但这也不会给出期望的结果当我使用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
itsPNG
或JPG
中导入图像时,我可以知道吗?由于文件类型直接影响图像大小,所以请查看上面编辑的文章,您是否遇到过此类问题。与此不同。但确实,文件大小存在异常大的差异。在我的例子中,几乎所有的图像都是JPEG格式的,即照相机拍摄的照片。我只能为UIImageJPEGRepresentation确认这一点。你读过这个问题了吗,我的问题是尺寸变化,以及我特别提到的以MB为单位的尺寸变化。磁盘大小与UIImage对象的大小。