首页 > 代码库 > [转]常用iOS图片处理方法

[转]常用iOS图片处理方法

自:http://blog.sina.com.cn/s/blog_8988732e0100xcx1.html

?==========?(one) UIImage 图像 等比例缩放==================================
PicAfterZoomWidth:缩放后图片宽 ?PicAfterZoomHeight:缩放后图片高 (预定义)

+ (UIImage?*)getPicZoomImage:(UIImage?*)image {

?

????UIImage?*img = image;

????

????int?h = img.size.height;

????int?w = img.size.width;

????if(h <=?PicAfterZoomWidth?&& w <=?PicAfterZoomHeight)

????{

????????image = img;

????}

????else?

????{

????????float?b = (float)PicAfterZoomWidth/w < (float)PicAfterZoomHeight/h ? (float)PicAfterZoomWidth/w : (float)PicAfterZoomHeight/h;

????????CGSize?itemSize =?CGSizeMake(b*w, b*h);

????????UIGraphicsBeginImageContext(itemSize);

????????CGRect?imageRect =?CGRectMake(0,?0, b*w, b*h);

????????[img?drawInRect:imageRect];

????????img =?UIGraphicsGetImageFromCurrentImageContext();

????????UIGraphicsEndImageContext();

????}

????return?img;

}


?===============?( two )把图片 圆角 化==================================

?

static?void?addRoundedRectToPath(CGContextRef?context,?CGRect?rect,?float?ovalWidth,

?????????????????????????????????float?ovalHeight)

{

????float?fw, fh;

????if?(ovalWidth ==?0?|| ovalHeight ==?0) {

????????CGContextAddRect(context, rect);

????????return;

????}

????CGContextSaveGState(context);

????CGContextTranslateCTM(context,?CGRectGetMinX(rect),?CGRectGetMinY(rect));

????CGContextScaleCTM(context, ovalWidth, ovalHeight);

????fw =?CGRectGetWidth(rect) / ovalWidth;

????fh =?CGRectGetHeight(rect) / ovalHeight;

????CGContextMoveToPoint(context, fw, fh/2);??// Start at lower right corner

????CGContextAddArcToPoint(context, fw, fh, fw/2, fh,?1);??// Top right corner

????CGContextAddArcToPoint(context,?0, fh,?0, fh/2,?1);?// Top left corner

????CGContextAddArcToPoint(context,?0,?0, fw/2,?0,?1);?// Lower left corner

????CGContextAddArcToPoint(context, fw,?0, fw, fh/2,?1);?// Back to lower right

????CGContextClosePath(context);

????CGContextRestoreGState(context);

}

+ (id) createRoundedRectImage:(UIImage*)image size:(CGSize)size

{

????// the size of CGContextRef

????int?w = size.width;

????int?h = size.height;

????

????UIImage?*img = image;

????CGColorSpaceRef?colorSpace =?CGColorSpaceCreateDeviceRGB();

????CGContextRef?context =?CGBitmapContextCreate(NULL, w, h,?8,?4?* w, colorSpace,kCGImageAlphaPremultipliedFirst);

????CGRect?rect =?CGRectMake(0,?0, w, h);

????CGContextBeginPath(context);

????addRoundedRectToPath(context, rect,?10,?10);

????CGContextClosePath(context);

????CGContextClip(context);

????CGContextDrawImage(context,?CGRectMake(0,?0, w, h), img.CGImage);

????CGImageRef?imageMasked =?CGBitmapContextCreateImage(context);

????CGContextRelease(context);

????CGColorSpaceRelease(colorSpace);

????return?[UIImage?imageWithCGImage:imageMasked];

}

=============== (Three)给图片 添加阴影==================================

請先添加库 import QuartzCore.framework

然后要导入头文件 #import <QuartzCore/QuartzCore.h>

[[myView layer] setShadowOffset:CGSizeMake(5, 5)]; //设置阴影起点位置

[[myView layer] setShadowRadius:6]; ??????????????????????//设置阴影扩散程度

[[myView layer] setShadowOpacity:1]; ?????????????????????//设置阴影透明度

[[myView layer] setShadowColor:[UIColor blueColor].CGColor]; //设置阴影颜色

?==========?(Four) UIImage 图像 旋转==================================

- (UIImage?*)imageRotatedByRadians:(CGFloat)radians

{

????return?[self?imageRotatedByDegrees:radians *?180/M_PI];

}

- (UIImage?*)imageRotatedByDegrees:(CGFloat)degrees?

{???

????// calculate the size of the rotated view‘s containing box for our drawing space

????UIView?*rotatedViewBox = [[UIView?alloc]?initWithFrame:CGRectMake(0,0,self.size.width,self.size.height)];

????CGAffineTransform?t =?CGAffineTransformMakeRotation(degrees *?M_PI?/?180);

????rotatedViewBox.transform?= t;

????CGSize?rotatedSize = rotatedViewBox.frame.size;

????[rotatedViewBox?release];

????// Create the bitmap context

????UIGraphicsBeginImageContext(rotatedSize);

????CGContextRef?bitmap =?UIGraphicsGetCurrentContext();

????// Move the origin to the middle of the image so we will rotate and scale around the center.

????CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);

????

????// ??// Rotate the image context

????CGContextRotateCTM(bitmap, degrees *?M_PI?/?180);

????// Now, draw the rotated/scaled image into the context

????CGContextScaleCTM(bitmap,?1.0, -1.0);

????CGContextDrawImage(bitmap,?CGRectMake(-self.size.width?/?2, -self.size.height?/?2,self.size.width,?self.size.height), [self?CGImage]);

????UIImage?*newImage =?UIGraphicsGetImageFromCurrentImageContext();

????UIGraphicsEndImageContext();

????return?newImage;

}

图像旋转更多请看:http://www.catamount.com/blog/1015/uiimage-extensions-for-cutting-scaling-and-rotating-uiimages/

[转]常用iOS图片处理方法