ios - 图片处理
来源:互联网 发布:奶油知多少 编辑:程序博客网 时间:2024/05/18 22:52
在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) {
}
- ios - 图片处理
- IOS应用开发-图片处理
- ios图片处理
- IOS图片处理
- ios图片处理
- IOS图片处理
- ios图片的处理
- IOS图片处理
- iOS 图片拉伸处理
- iOS处理图片
- ios图片处理
- ios 图片处理
- ios 处理图片缩放
- IOS 图片处理
- IOS处理图片旋转
- iOS之图片处理
- iOS图片压缩处理
- iOS图片压缩处理
- C++学习笔记:多态的实现原理
- linux一些不常用单很有用的命令
- 安卓开发 先检测WIFI是否打开,如果打开,则检测是否连接成功,如果关闭,则打开后检测是否连接成功。
- Java分割字符串
- iOS隐藏UITableView下面多余的线条
- ios - 图片处理
- 线程中Handler和Looper的理解
- 50个实用的jquery案例
- Android动画合集之属性动画-初见
- 【Developer Log】ProGuard扰码web项目(WAR)
- 蒙太奇式的产品设计--老吴说产品
- android测试工具MonkeyRunner--google官网翻译
- Sicily 1321(Dijkstra算法)
- 为本地项目建立版本管理