IOS开发中一些截图小技巧总结

1.使用UIImageView的layer层的contentsRect属性来进行截图

代码如下:

//创建一个UIImageView视图
 UIImageView *img=[[UIImageView alloc]initWithFrame:CGRectMake(100, 200, 300, 50)];
//指定照片
 img.image=[UIImage imageNamed:@"yuan"];
//将照片按照一定比例裁剪
//注意CGRect中的四个值都是0~1之间的,表示裁剪的倍数,前两个表示向左右和上下移动的距离,后面的两个表示宽和高裁剪的倍数,但是通过此操作UIImageView的大小并不会改变
img.layer.contentsRect=CGRectMake(0, 0, 0.1 ,1);

         //设置图片居左显示

        _imageView.contentMode = UIViewContentModeLeft;

        //设置超出视图的部分会被裁掉

        _imageView.clipsToBounds = YES;

2.使用CGImageCreateWithImageInRect函数来截取图片,这是一个C语言函数依靠像素来进行实现

CGImageCreateWithImageInRect函数,它的返回值是一个CGImage,它的第一个参数为要裁剪的图片(要转化为CGImage的形式),第二个参数为裁剪后图片的大小

实现代码如下

//初始时刻UIImageView的大小
UIImageView *imageView=[[UIImageView alloc]initWithFrame:(20, 290, 0, 50)];
//使用image属性添加图片
UIImage *image = [UIImage imageNamed:@"hou"];
//使用UIImage的imageWithCGImage方法配置图片,这个方法要传给它的参数为CGImage,此时要调用CGImageCreateWithImageInRect函数,它的返回值就是一个CGImage,它的第一个参数为要裁剪的图片(要转化为CGImage的形式),第二个参数为裁剪后图片的大小
imageView.image=[UIImage
imageWithCGImage:CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, 0, self.frame.size.width-40-(self.frame.size.width-40)/6*_lab, image.size.height))];
imageView.frame=CGRectMake(20, 290, self.frame.size.width-40-(self.frame.size.width-40)/6*_lab, 50);

这样裁剪图片以后就达到了裁图的效果,如果想保留图片的所有内容只是为了达到缩图的效果,可以通过在CGImageCreateWithImageInRect函数的控制图片长和宽的参数上都乘以以下代码即可

[UIScreen mainScreen].scale;//获取当前屏幕坐标与像素坐标的比例

需要注意的是用此方法裁剪图片我们会发现裁剪好的图片刚好是,旋转90度后裁剪得到的图片,这是由于CGImageCreateWithImageInRect函数裁剪的是UIImage,而UIIMage的坐标有点不同,它的(0,0)点不是位于左上方,而是在左下方,因此在裁剪图片时要注意

3.使用UIGraphicsBeginImageContext来完成图片的裁剪

这是自己编写的一个裁剪图片已经封装好的方法

//第一个参数是要裁剪照片的名称,第二个参数是裁剪后照片的大小
-(UIImage *)backgroundImage:(NSString *)image toSize:(CGSize)imageSize
{
    //创建一个新的图片对象用于返回
    UIImage *newImage;
    //用传进来的图片名创建UIImage对象
    UIImage *workImage=[UIImage imageNamed:image];
    //创建一个图片上下文
    UIGraphicsBeginImageContext(imageSize);
    //设置新图片的大小
    CGRect imageRect=CGRectMake(0, 0, imageSize.width, imageSize.height);
    //绘制新图片
    [workImage drawInRect:imageRect];
    //从当前context中创建一个改变大小后的图片
    newImage=UIGraphicsGetImageFromCurrentImageContext();
    //关闭图片的图像上下文
    UIGraphicsEndImageContext();
    return newImage;
    
    
}

说裁剪其实说缩放更恰当一些

下面这个函数也是运用了图像上下文,实现了图片的剪切

-(UIImage *)backgroundImage:(NSString *)aimage toSize:(CGSize)imageSize
{
//1.获取图片
UIImage* image = [UIImage imageNamed:aimage];
// 2.开启图片的图形上下文
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
// 3.获取图片的图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 4.在上下文中绘制裁剪的形状
CGContextStrokeRect(ctx,CGRectMake(0, 0, imageSize.width, imageSize.height));//画方框
//CGContextAddArc(ctx, image.size.width * 0.5, image.size.height * 0.5, image.size.width * 0.5, 0, 2 * M_PI, 1);//画圆形
// 5.裁剪
CGContextClip(ctx);
// 6.在裁剪过后的上下文中画图
[image drawAtPoint:CGPointZero];
// 7.通过图片的图形上下文获取图片
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// 8.关闭图形上下文
UIGraphicsEndImageContext();
    return newImage;
}

如果截图后发生了,图片变形,或是原图大小没有改变,需要动态的把UIImageView容器改的适合图片。

这是根据我的实践和借鉴了其他人一些想法写出来的,希望大家相互学习

猜你喜欢

转载自blog.csdn.net/xutaoshuaiqi/article/details/81515693