问题描述
做一个App发送图片的功能,需要展示图片的缩略图,所以从网上寻找了重绘UIImage的方法:
代码来源:
http://www.cnblogs.com/robinkey/archive/2013/01/18/2770361.html
- (UIImage *)TelescopicImageToSize:(CGSize) size
{
UIGraphicsBeginImageContext(size);
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
第一次运行正常, 成功将相册中得图片缩放到了80*80的大小 展示出来也是这么大,于是进行了本地储存操作,但是当我第二次打开程序的时候,惊奇的发现 图片大小变成了40*40. 其中并没有对图片的大小进行操作,最后看到一篇文章才得到启发:
http://www.cnblogs.com/smileEvday/archive/2013/05/14/UIImage.html
其中有一句话这么说得:
先想一个问题“一个图像的尺寸到底是多大呢?”
第一反应可能就是image.size,恭喜你答错了,正确的答案是图像的实际的尺寸(像素)等于image.size乘以image.scale
原来我忽略了image得scale属性,图片缩小后 默认的scale是1.0,不论是几倍的屏幕,而下次从本地加载UIImage的data数据时,系统默认的scale是设备的scale,所以本来是80*80的一倍图像,下次加载的时候scale变成了2.0,于是就出现了图片变小的结果. 下面是我修改了缩略图方法的代码:
//根据新的大小重新绘制Image
- (UIImage *)TelescopicImageToSize:(CGSize)size image:(UIImage *)image
{
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
//缩小后的一倍图
UIImage *sizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//将图片的scale属性改成设备的scale
UIImage * newImage = [[UIImage alloc] initWithCGImage:sizeImage.CGImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
return newImage;
}
这样 图片就不会变小了