在我的iPhone应用程序中,我用相机拍照,然后我想将其调整为290*390像素.我正在使用此方法调整图像大小:
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但它是一个未记录的功能,所以我不能再使用iPhone OS4了.
那么...调整UIImage大小的最简单方法是什么?
我期待缩减一个UIImage在iOS.
我已经看到了下面的其他问题以及他们如何按尺寸缩小图像的方法.
调整图像大小Objective-C
如何在iphone中以objective-c编程调整图像
大小调整UIImage大小的最简单方法?
这些问题都是基于将图像重新调整为特定大小.在我的情况下,我希望根据最大尺寸重新调整/缩小图像.
例如,我想将最大NSData大小设置为500 KB.我知道我可以像这样得到图像的大小://检查返回图像的大小
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
// Log out the image size
NSLog(@"%lu KB",(imageData.length/1024));
Run Code Online (Sandbox Code Playgroud)
我想做的是这里的某种形式的循环.如果尺寸大于我设置的最大尺寸,我想稍微缩小图像,然后检查尺寸.如果尺寸仍然太大,则再次缩小,然后再次检查,直到它低于最大设定尺寸.
我不确定最好的办法是什么.理想情况下,我不希望始终将图像缩小到特定大小,但每次只能略微缩小图像.这样我可以拥有最大的(大小w/h)图像本身和最大尺寸(字节).如果我一次只略微缩小,那么最好的方法是什么呢?
编辑
要确认,我希望重新调整实际图像的大小,但重新调整图像的大小,使其小于最大NSData长度.例如: -
检查NSData长度
-If高于我想要将UIImage传递给方法
的最大值 - 然后
循环通过此方法每次稍微调整实际图像大小
-Until它在最大NSData长度以下,然后返回图像?
我有以下用于缩放图像的代码片段.这是一个循环,为每次传递创建和排出自动释放池.此代码在iOS5.0中的模拟器,iPad或模拟器上的iOS4.3中工作正常,但在iPad1上的iOS5.0.1上,经过50-60次传递后,drawInRect开始消耗永不释放的内存.我一直在从辅助线程调用它,但现在调用主线程上的缩放操作.
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
我做错了什么或这是一个iOS5.0.1错误?
更新:我尝试了很多测试.我已经能够证明使用XCode 4.0编译的完全相同的代码在同一台iPad上运行良好.使用XCode 4.2.1编译的相同代码会导致内存不足.在后台线程中调用此缩放例程.我使用较低级别的核心图形调用编写了不同的缩放程序.它不会随XCode 4.0泄漏,但在我的应用程序中使用XCode 4.2.1时会泄漏.在独立项目中运行的完全相同的例程和调用树似乎不会泄漏(很多)XCode 4.2.1上的内存.我正等着苹果听到这个.同时我需要使用XCode 4.我唯一的安装映像需要Snow Leopard,这意味着我正在使用我古老的5.5岁的机器.谢谢
Update 1/2012仅当应用程序从XCode内启动时才会出现这种情况.在iPad上启动的相同可执行文件没有出现泄漏.具有相同例程的不同应用程序不会出现泄漏.
我已经向Apple打开了一个错误报告,并向他们发送了一个重现问题的项目.我不认为它会很快得到解决,但它似乎并不像我原先想象的那样普遍.
更新6/2012尽管已经向Apple发送了一个复制问题的最小项目,但他们声称无法重现问题而且没有取得任何进展.
我需要缩放来自iPhone应用程序中视图层的图像的分辨率.显而易见的方法是在UIGraphicsBeginImageContextWithOptions中指定一个比例因子,但是只要比例因子不是1.0,那么图像的质量就会变成底池 - 远远超过像素丢失的预期.
我已经尝试了其他几种缩放技术,但它们似乎都围绕着CGContext的东西而且似乎都做了同样的事情.
简单地改变图像"大小"(不改变点分辨率)是不够的,主要是因为该信息似乎被管道中的其他人很快丢弃(图像将被转换为JPG并通过电子邮件发送).
还有其他方法可以在iPhone上缩放图像吗?
我用来SDWebImage异步下载图像到我的UIImageViews.收到的大多数图像都是可接受的尺寸,可以轻松下载,并设置为UIImageViews.
但有时候,URL上的源图像分辨率非常高(相对于我的大小imageView- 60x60).在这种情况下,永远不会设置图像.有时我的应用程序崩溃,有时,没有任何事情发生(图像停留nil),并且在极少数情况下我收到了类似的错误:( Unable to allocate 400000 bytes of memory我不完全确定确切的错误日志,我道歉).
例如,这从Pinterest的站点本身的Pinterest的图标的图像是巨大的(10000×10000).我imageView永远无法绘制这张图片.目前,我已经硬编码用这个替换图像,但我知道这是不好的做法.此外,这只是一种情况,可能会有无限多的图像,这可能会影响用户体验.
我该如何处理这类案件?
我正在尝试缩小使用 iPhone 4 及更高版本拍摄的 Objective-C 图像,以便我可以尽快将其发送到服务器。目前,全尺寸图像需要很长时间。
我正在尝试的缩小规模的当前是:
CGSize imageSize;
imageSize = CGSizeMake(484, 888);
UIImage *img = [UIImage imageWithContentsOfFile:path];
UIGraphicsBeginImageContext( imageSize );
[img drawInRect:CGRectMake(0,0,imageSize.width,imageSize.height)];
UIImage* realfrontImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *frontImageData = UIImageJPEGRepresentation(realfrontImage, 1.0);
Run Code Online (Sandbox Code Playgroud)
这给了我一个 320x460 的图像,我如何得到我想要的 484x888 的大小。
我们的 UIPickerView 有一个黑暗的背景,选择线非常难以看到。反正有没有把它们改成我选择的颜色?
更新:我说的是“熊猫”项目上方和下方的 ---。
Cat
Dog
Elephant
-----------
Panda
-----------
Bear
Giraffe
Run Code Online (Sandbox Code Playgroud) ios ×7
uiimage ×4
iphone ×3
ipad ×2
objective-c ×2
uikit ×2
image ×1
ios5 ×1
ios6 ×1
memory-leaks ×1
nsdata ×1
resize ×1
sdwebimage ×1
uiimageview ×1
uipickerview ×1
xcode ×1