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