1、根據(jù)UIView對象生成UIImage對象
/**
根據(jù)UIView生成相應(yīng)的UIImage對象蒸苇,生成的UIImage對象的size即為view的size大小,方向?yàn)閁IImageOrientationUp轿偎,即默認(rèn)方向
@param view 視圖
@return UIImage對象
*/
+ (UIImage *)imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
2狭魂、生成純色的UIImage對象,即根據(jù)顏色生成UIImage
/**
根據(jù)顏色和size大小生成UIImage對象潮针,生成的UIImage對象大小即為參數(shù)imageSize的大小天试,顏色即為參數(shù)color的顏色,方向?yàn)閁IImageOrientationUp然低,即默認(rèn)方向
@param color 顏色
@param imageSize 大小
@return UIImage對象
*/
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)imageSize
{
CGRect rect = CGRectMake(0, 0, imageSize.width, imageSize.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
3喜每、對UIImage對象進(jìn)行剪裁操作
/**
剪裁圖片到指定的rect,rect決定了剪裁圖片的左上角的坐標(biāo)雳攘,和剪裁的大小
@param rect 坐標(biāo)大小
@return UIImage對象
*/
- (UIImage *)imageCropToRect:(CGRect)rect
{
CGRect drawRect = CGRectMake(-rect.origin.x , -rect.origin.y, self.size.width * self.scale, self.size.height * self.scale);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));
[self drawInRect:drawRect];
UIImage *tempImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return tempImage;
}
//此方法與上面的方法效果一樣带兜,只不過使用的是相對比較底層的框架,是CGImage的范疇吨灭,但是論結(jié)果應(yīng)該是一樣的
//有不同的地方是刚照,當(dāng)你處理圖片設(shè)計(jì)方向問題的時(shí)候,這個(gè)C語言的處理不是很友好喧兄,個(gè)人理解的是无畔,CGImage這個(gè)框架不涉及方向的處理,所以這個(gè)方法還是慎重考慮使用吠冤。
- (UIImage *)imageCropToRect:(CGRect)rect
{
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height));
UIImage *tempImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return tempImage;
}
4浑彰、對UIImage對象進(jìn)行縮放操作,即按比例縮放到指定的大小
/**
縮放圖片大小到指定size
@param size 大小
@return UIImage對象
*/
- (UIImage*)imageScaleToSize:(CGSize)size
{
UIGraphicsBeginImageContext(size);
[self drawInRect:CGRectMake(0 ,0 ,size.width ,size.height)];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
5拯辙、修正圖片的方向
/* 修正圖片方向(應(yīng)該只有在拍照完成使用照片的時(shí)候會(huì)用到) */
- (UIImage *)imageFixOrientation
{
// No-op if the orientation is already correct
if (self.imageOrientation == UIImageOrientationUp) return self;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform = CGAffineTransformIdentity;
switch (self.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, self.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
case UIImageOrientationUp:
case UIImageOrientationUpMirrored:
break;
}
switch (self.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, self.size.height, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationUp:
case UIImageOrientationDown:
case UIImageOrientationLeft:
case UIImageOrientationRight:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height,
CGImageGetBitsPerComponent(self.CGImage), 0,
CGImageGetColorSpace(self.CGImage),
CGImageGetBitmapInfo(self.CGImage));
CGContextConcatCTM(ctx, transform);
switch (self.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);
break;
default:
CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
6郭变、圖片質(zhì)量的壓縮
//通常我們使用下面的方法對圖片進(jìn)行壓縮處理
//但是對于下面這個(gè)系統(tǒng)的方法開說颜价,壓縮系數(shù)需要一個(gè)合適的值,我當(dāng)時(shí)記得是各種測試測出來一個(gè)比較合適的值
//不知道大家對于這個(gè)壓縮系數(shù)有什么理解诉濒,還請指點(diǎn)一二
/**
圖片壓縮
@param image UIImage圖片對象
@return compressionQuality 壓縮系數(shù)0-1之間的數(shù)值
*/
UIImageJPEGRepresentation(image, compressionQuality);