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