最近要做一个类似于微信的设置聊天背景图的需求 微信的背景图聊天并不只是单纯的从相册中取出个图片然后显示那么简单。。。。里面还包括了放大 居中 裁剪 等功能
so 写了下 下面上 代码 希望能帮助到那些和我有相同需求的人
使用category 对UIImage 写了一个类别
// 放大Image
- (UIImage*) getImageScaleToSize:(CGSize)size
{
CGSize newSize;
if (self.size.height / self.size.width > 1){
newSize.height = size.height;
newSize.width = size.height / self.size.height * self.size.width;
} else if (self.size.height / self.size.width < 1){
newSize.height = size.width / self.size.width * self.size.height;
newSize.width = size.width;
} else {
newSize = size;
}
// 创建一个bitmap的context
// 并把它设置成为当前正在使用的context
UIGraphicsBeginImageContextWithOptions(newSize, YES, 0);
// 绘制改变大小的图片
[self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
// 从当前context中创建一个改变大小后的图片
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
// 返回新的改变大小后的图片
return scaledImage;
}
//截取部分图像
//rect 是要截取的大小
-(UIImage*)getSubImage:(CGRect)rect
{
CGImageRef subImageRef = CGImageCreateWithImageInRect(self.CGImage, rect);
CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
UIGraphicsBeginImageContext(smallBounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, smallBounds, subImageRef);
UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
UIGraphicsEndImageContext();
return smallImage;
}
//图像居中
#pragma mark -- UIImage居中
- (UIImage *)maekImageToCenterWithImage:(UIImage *)image{
CGSize size = image.size;
UIGraphicsBeginImageContext(size);
float dwidth = (self.view.frame.size.width - size.width) /2.0f;
float dheight = 0;
CGRect rect = CGRectMake(dwidth, dheight, size.width, size.height);
[image drawInRect:rect];
UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newimg;
}
整个的流程就是 当取到小图的时候 就放大 然后要把团片居中 然后从中间开始裁剪 就得到了想要的效果了。。。