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) {

}




1 0