将UIImage大小减小到可管理的大小(减少字节数)

时间:2009-01-28 11:34:22

标签: iphone objective-c cocoa image resize

我想减少设备捕获的图像的字节数,因为我相信_imageScaledToSize不会减少图片的字节数(或者它是什么?) - 我想存储一个本地字典对象中图像的缩略图,无法将全尺寸图像放入字典中。有什么想法吗?

5 个答案:

答案 0 :(得分:23)

如果您只想压缩UIImage,可以使用

NSData *dataForPNGFile = UIImagePNGRepresentation(yourImage);

生成编码为PNG(可轻松插入NSDictionary或写入磁盘)的图像的NSData版本,或者您可以使用

NSData *dataForPNGFile = UIImageJPEGRepresentation(yourImage, 0.9f);

仅以JPEG格式执行相同操作。第二个参数是JPEG的图像质量。这两者都应该产生比你的UIImage更小的内存方式的图像。

使用已发布的方法调整UIImage的大小以创建较小的缩略图(以像素为单位)有点棘手。 _imageScaledToSize来自私有API,我强烈建议您不要使用它。有关在记录的方法中有效的方法,请参阅this post

答案 1 :(得分:11)

前几天我遇到了这个问题并进行了相当多的研究。我找到了一个很棒的解决方案,其中包含代码:

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

答案 2 :(得分:1)

您需要将图像绘制为较小尺寸的图形上下文。然后,释放原始图像。

答案 3 :(得分:0)

当你说'实际尺寸'时,你在谈论印刷品吗?因为您只需更改打印机页面大小。

您是在谈论用于捕捉图像的像素数量吗?如果您有像素数组3000x2000,并且只需要150x150,那么您可以裁剪图像。在捕获时,如果您有科学成像仪,那么您可以设置将捕获的区域。相机驱动程序将包含相关说明。如果你想在1500x1000中捕获3000x2000,你可以尝试将图像分类,如果这就是你需要的。

或者,您可以使用重新采样后捕获以使图像更小。一种这样的算法是双三次重采样,也是线性重采样 - 存在许多变化。

我认为这最后是你最感兴趣的...在这种情况下,请查看算法的this Wikipedia page。或者,您可以转到FreeImage并获取一个可以读取图像的库,也可以调整图像大小。

答案 4 :(得分:0)

from django.contrib import admin from auth.models import Subscription, Package class PackageAdmin(admin.ModelAdmin): list_display = ('package_name', 'package_id') fieldsets = ( (None, { 'fields': ('package_name',) }), ('Advanced options', { 'fields': ('package_id',) }), ) admin.site.register(Package, PackageAdmin) 可以解决问题,但我发现使用UIImageJPEGRepresentation框架通常可以获得相同质量设置的明显更好的压缩效果。它可能会更慢,但根据您的使用情况,这可能不是问题。

(适用于此blog post by Zachary WestImageIO代码。)

NSData