iOSQuartz2D-04-图片剪裁并保存至相册

实现效果


  • 操作步骤

    • 绘制一个矩形框,弹出一个alertView,提示是否保存图片
    • 点击”是”,将图片保存到相册
    • 在相册中查看保存的图片
  • 效果图

实现思路


  • 在控制器的view上添加一个imageView,设置图片
  • 在控制器的view上添加一个pan手势
  • 跟踪pan手势,绘制一个矩形框(图片的剪切区域
  • 在pan手势结束时,通过alertView提示“是否将图片保存至相册?”
    • 点击“是”,保存图片
    • 点击“否”,暂时什么都不做

实现步骤


  • 通过storyboard在控制器的view上添加一个imageView(设置图片),并在控制器的.m文件中拥有该属性

    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  • 设置通过手势绘制的图片的剪切区域
    • 将图片的剪切区域作为成员属性clipView
    @property (nonatomic, weak) UIView *clipView;
    • 通过懒加载的方式创建clipView,并初始化
    - (UIView *)clipView
    {
        //如果clipView为被创建,就创建
        if (_clipView == nil)
        {
            UIView *view = [[UIView alloc] init];
            _clipView = view;
            //设置clipView的背景色和透明度
            view.backgroundColor = [UIColor blackColor];
            view.alpha = 0.5;
            //将clipView添加到控制器的view上,此时的clipView不会显示(未设置其frame)
            [self.view addSubview:_clipView];
        }
        return _clipView;
    }
  • 给控制器的view添加pan手势,跟踪pan手势,绘制图片剪切区域
    • 创建并添加手势
    /**创建手势**/
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
        /**
        *每当pan手势的位置发生变化,就会调用pan:方法,并将手势作为参数传递
        */
    /**添加手势**/
    [self.view addGestureRecognizer:pan];
    • 增加成员属性,记录pan手势开始的点
    @property (nonatomic, assign) CGPoint startPoint;
    • 监听手势的移动
    - (void)pan:(UIPanGestureRecognizer *)pan
    {
        CGPoint endPoint = CGPointZero;
    
        if (pan.state == UIGestureRecognizerStateBegan)
        {
            /**开始点击时,记录手势的起点**/
            self.startPoint = [pan locationInView:self.view];
        }
        else if(pan.state == UIGestureRecognizerStateChanged)
        {
            /**当手势移动时,动态改变终点的值,并计算起点与终点之间的矩形区域**/
            endPoint = [pan locationInView:self.view];
            //计算矩形区域的宽高
            CGFloat w = endPoint.x - self.startPoint.x;
            CGFloat h = endPoint.y - self.startPoint.y;
            //计算矩形区域的frame
            CGRect clipRect = CGRectMake(self.startPoint.x, self.startPoint.y, w, h);
            //设置剪切区域的frame
            self.clipView.frame = clipRect;
        }
        else if(pan.state == UIGestureRecognizerStateEnded)
        {
            /**若手势停止,将剪切区域的图片内容绘制到图形上下文中**/
            //开启位图上下文
            UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 0);
            //创建大小等于剪切区域大小的封闭路径
            UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.clipView.frame];
            //设置超出的内容不显示,
            [path addClip];
            //获取绘图上下文
            CGContextRef context = UIGraphicsGetCurrentContext();
            //将图片渲染的上下文中
            [self.imageView.layer renderInContext:context];
            //获取上下文中的图片
            UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
            //关闭位图上下文
            UIGraphicsEndImageContext();
            //移除剪切区域视图控件,并清空
            [self.clipView removeFromSuperview];
            self.clipView = nil;
            //将图片显示到imageView上
            self.imageView.image = image;
            //通过alertView提示用户,是否将图片保存至相册
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"保存图片" message:@"是否将图片保存至相册?" delegate:self cancelButtonTitle:@"否" otherButtonTitles:@"是", nil];
            [alertView show];
    }
    }
  • 设置alertView的代理方法,确定是否保存图片
    - (void)alertView:(nonnull UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        //若点击了“是”,则保存图片
        if (buttonIndex == 1)
        {
            UIImageWriteToSavedPhotosAlbum(self.imageView.image, nil, nil, nil);
            /**
            * 该方法可以设置保存完毕调用的方法,此处未进行设置
            */
        }
    }

本博客的最新状态将会同步到新浪微博账号:世俗孤岛

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 19:01:31

iOSQuartz2D-04-图片剪裁并保存至相册的相关文章

iOS图片 缩放、剪裁、自适应剪裁、保存到相册

原文链接: iOS图片 缩放.剪裁.自适应剪裁.保存到相册 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

iOSQuartz2D-04-手动剪裁图片并保存到相册

实现效果 操作步骤 绘制一个矩形框,弹出一个alertView,提示是否保存图片 点击"是",将图片保存到相册 在相册中查看保存的图片 效果图 实现思路 在控制器的view上添加一个imageView,设置图片 在控制器的view上添加一个pan手势 跟踪pan手势,绘制一个矩形框(图片的剪切区域) 在pan手势结束时,通过alertView提示"是否将图片保存至相册?" 点击"是",保存图片 点击"否",暂时什么都不做 实现

裁剪图片,截图,保存到相册,水印

// --- 裁剪圆形图片 -画带边框的圆形头像 - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { // -1.获取图片 UIImage* image = [UIImage imageNamed:@"me"]; // -2.margin CGFloat margin = 10; // -3.上下文大小 CGSize size = CGSizeMake(image.size.width + 2 * margi

iOS开发——使用技术OC篇&保存(获取)图片到(自定义)相册

保存(获取)图片到(自定义)相册 最近在学 iOS相关技术(绘图篇实现画板功能)的时候设计到了两个常用的知识点,那就是保存图片到相册和葱相册中获取图片. 只是个人比较好奇拓展一些技术,说的难听点叫做装牛角尖,好听点就是为了装逼而已,所以在保存相册的时候使用真及测试发现不能保存到我iPhone里 main的自定义相册里面,就查看文档和资料,也借鉴别人的分享实现了想要的功能,就把他给记录下来,这个虽然没有直接保存和获取常用但是也是一项很好的实用技术. 一:首先来看看怎么获取相册的图片: 1 // 弹

(转)将图片保存到相册

1.首先,在iOS中把图片保存到系统照片是比较简单的,具体实现用下面的语句即可 1 - (IBAction)save:(id)sender { 2 // 存储图片到"相机胶卷" 3 UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 4 } 5 6 // 成功保存图片到相册中, 必须调用此方法, 否

iOS开发中,如何将图片保存本地相册中

- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; /* 保存图片有两种方式: 1>.按钮方式; 2>.长按图片方式; */ //显示图片 _imageV = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)]; //[注意??] : "9.jpg" 这里是图片名

图片保存到相册

点击按钮,将self.imageView上面的image内容保存到本地相册,并指定判断保存成功与否的方法imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo: - (IBAction)saveImageToAlbum:(id)sender {    UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(imageSavedToPhotosAlbu

Android 拍照图片选取与图片剪裁

最近从以前的项目中扒下来一个常用的模块,在这里有必要记录一下的,就是android上获取图片以及裁剪图片,怎么样?这个功能是不是很常用啊,你随便打开一个App,只要它有注册功能都会有设置人物头像的功能,尤其在内容型的app中更为常见,那么这些功能是怎么实现的呢?今天,在这里就记录一下好了,防止以后的项目中也会用到,就直接拿来用好了. 1.通过拍照或者图册获取图片(不需要剪裁) 这种获取图片的方式就比较次了,因为不设置图片的剪裁功能,有可能因为图片过大,导致OOM,但是这种方式也是有必要讲一下的,

android拍照图片选取与图片剪裁

转载请注明出处:http://blog.csdn.net/allen315410/article/details/39994913 最近从以前的项目中扒下来一个常用的模块,在这里有必要记录一下的,就是android上获取图片以及裁剪图片,怎么样?这个功能是不是很常用啊,你随便打开一个App,只要它有注册功能都会有设置人物头像的功能,尤其在内容型的app中更为常见,那么这些功能是怎么实现的呢?今天,在这里就记录一下好了,防止以后的项目中也会用到,就直接拿来用好了. 1.通过拍照或者图册获取图片(不