ios 改变图片尺寸_iOS 修改图片尺寸的方法

本文介绍了在iOS中修改图片尺寸的两种方法:使用ImageContext和Image I/O。两种方法在效率上接近,但ImageContext可能会导致内存问题。Image I/O在处理大图片时更优,因为它允许设置最大像素尺寸并避免内存飙升。同时提到了CoreImage作为另一种处理图片尺寸的选项,但其速度较慢。文章通过代码示例和性能测试对比了各种方法的优劣。
摘要由CSDN通过智能技术生成

目前在iOS上对于图片的优化点有很多,例如图片解码、图片渐加载和图片尺寸处理。这篇文章是说明目前iOS 代码中修改图片尺寸的两种方法,以及这两种方法区别和注意点。

修改图片尺寸的两种方法

1. 画布ImageContext(UIKit)

/** 利用画布对图片尺寸进行修改

@param data ---- 图片Data

@param maxPixelSize ---- 图片最大宽/高尺寸 ,设置后图片会根据最大宽/高 来等比例缩放图片

@return 目标尺寸的图片Image */

+ (UIImage*) getThumImgOfConextWithData:(NSData*)data withMaxPixelSize:(int)maxPixelSize

{

UIImage *imgResult = nil;

if(data == nil) { return imgResult; }

if(data.length <= 0) { return imgResult; }

if(maxPixelSize <= 0) { return imgResult; }

const int sizeTo = maxPixelSize; // 图片最大的宽/高

CGSize sizeResult;

UIImage *img = [UIImage imageWithData:data];

if(img.size.width > img.size.height){ // 根据最大的宽/高 值,等比例计算出最终目标尺寸

float value = img.size.width/ sizeTo;

int height = img.size.height / value;

sizeResult = CGSizeMake(sizeTo, height);

} else {

float value = img.size.height/ sizeTo;

int width = img.size.width / value;

sizeResult = CGSizeMake(width, sizeTo);

}

UIGraphicsBeginImageContextWithOptions(sizeResult, NO, 0);

[img drawInRect:CGRectMake(0, 0, sizeResult.width, sizeResult.height)];

img = nil;

imgResult = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return imgResult;

}

2. image I/O 创建省略图

/** Image I/O 获取指定尺寸的图片,返回的结果Image 目标尺寸大小 <= 图片原始尺寸大小

@param data ---- 图片Data

@param maxPixelSize ---- 图片最大宽/高尺寸 ,设置后图片会根据最大宽/高 来等比例缩放图片

@return 目标尺寸的图片Image */

+ (UIImage*) getThumImgOfImgIOWithData:(NSData*)data withMaxPixelSize:(int)maxPixelSize

{

UIImage *imgResult = nil;

if(data == nil) { return imgResult; }

if(data.length <= 0) { return imgResult; }

if(maxPixelSize <= 0) { return imgResult; }

const float scale = [UIScreen mainScreen].scale;

const int sizeTo = maxPixelSize * scale;

CFDataRef dataRef = (__bridge CFDataRef)data;

/* CGImageSource的键值说明

kCGImageSourceCreateThumbnailWithTransform - 设置缩略图是否进行Transfrom变换

kCGImageSourceCreateThumbnailFromImageAlways - 设置是否创建缩略图,无论原图像有没有包含

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值