ios - 图片处理

在ios开发中,图片处理包过图片数据转换和图片裁剪压缩。

现在我们来具体研究下:

1.图片数据转换

UIImage <-> NSData

//UIImage转NSData

UIImage *image = [UIImage imageNamed:@"本地图片.png"];

a.NSData *imageData = UIImagePNGRepresentation(image);

b.NSData *imageData = UIImageJPEGRepresentation(image,1.0);

a和b方法的区别:

1).a方法耗时久;b方法耗时相对少;

2).a方法得到的图片为.png格式;b方法得到的图片为.jpg格式;

3).a方法得到的图片较大,b方法可通过调整压缩系数改变图片的清晰度来达到减小图片的大小,得到的图片相对较小

//NSData转UIImage

UIImage *image = [UIImage imageWithData:imageData];


CGImageRef <-> UIImage

//UIImage转CGImageRef

CGImageRef cgimage = image.CGImage;

//CGImageref转UIImage

UIImage *image = [UIImage imageWithCGImage:cgimage];


UIImage <->NSString

//UIImage转NSData再转NSString

NSString *encodeImage = [imageData base64EncodedStringWithoptions:NSDataBase64Encoding64CharacterLineLength];

//NSString转NSData转UIImage

NSData *imageData = [[NSData alloc] initWithBase64Encoding:encodeImage];

UIImage *image = [UIImage imageWithData:imageData];

上面就是一些图片数据的基本转换了,下面对图片处理中可能要用到的一些方法


2.图片的压缩、裁剪、旋转

压缩:

- (UIImage *)image:(UIImage*)image scaledToSize:(CGSize)newSize

{

UIGraphicsBeginImageContext(newSize);

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

裁剪

CGrect rect = CGRectMake(0,0,100,100);//创建矩形框

UIImage *newImage = CGImageCreateWithImageInRect([image CGImage],rect);

图片圆形裁剪

- (UIImage *)getEllipseImageWithImage:(UIImage *)originImage

{

CGFloat padding = 5;//圆形图像距离图像的边框

UIColor *epsBackColor = [UIColor clearColor];//图像背景色

CGSize originsize = originImage.size;

CGrRect originRect = CGRectMake(0,0,originsize.width,originsize.height);

UIGraphicsBeginImageContext(originsize);

CGContextRef ctx = UIGraphicsGetCurrentContext();

//目标区域

CGRect desRect = CGRectMake(padding,padding,originsize.width-(padding*2),originsize.height-(padding*2));

//设置填充背景色

CGContextSetFillColorWithColor(ctx, epsBackColor.CGColor);

UIRectFill(originRect);//真正的填充

//设置椭圆变形区域

CGContextAddEllipseInRect(ctx,desRect);

CGContextClip(ctx);//截取椭圆区域

[originImage drawInRect:originRect];//将图像画在目标区域

//边框//

CGFloat borderWidth = 10;

CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);//设置边框颜色

CGContextSetLineCap(ctx,borderWidth);//设置边框宽度

CGContextAddEllipseInRect(ctx,desRect);

CGContextStrokePath(ctx);//描边框

//

UIImage *desImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return desImage;

}

旋转

UIImage *newImage = [UIImage imageWithCGImage:image.CGImage scale:1.0 orientation:UIImageOrientationRight];

//UIImageOrientationUp

//UIImageOrientationDown

//UIImageOrientationLeft

//UIImageOrientationRight


3.图片表单化

//使用AFNetworking-SDK网络请求

AFHttpRequestOperation *operation;

operation = [self Post:requestURL parameters:transferParas constructingBodyWithBlock:^(id<AFMultipartFormData>formData)

{

NSDictionary *fileDataDict = //含有图片及各参数的字典

NSArray *keys = [fileDataDict allKeys];//参数的数组

//对图片表单化

NSData *data = UIImageJPEGRepresentation(image,1.0);

NSString *fileName = @"file[0].jpg";

[formData appendPartWithFileData:(NSData *)data name:@"uploadedfiles[]" fileName:fileName mimeType:@"multipart/form-data"];

//将参数添加到Data数据后面

for (int i = 0; i < keys.count; i++)

{

NSString *key = [keys objectAtIndex:i];

if (![key isEqualToString:@"image"])

{

NSData *strData = [[fileDataDict objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding];

[formData appendPartWithFormData:strData name:key];

}

}

} success:^(AFHttpRequestOperation *operation, id responseObject) {

} failure:^(AFHttpRequestOperation *operation, NSError *error) {

}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z498544419

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值