iOS 任意切割图片

自定义圆形

通过一个镂空的模板选中想要切割的部分, 然后生成图片

必要的属性,  和蒙版 以及要切割的图片. (胖迪)

    var imageview = UIImageView.init()var bezeier : UIBezierPath!var maskView : UIView!var circlepath : UIBezierPath!var shaplayer : CAShapeLayer!override func viewDidLoad() {super.viewDidLoad()self.view.backgroundColor = UIColor.whiteself.view.addSubview(imageview)self.imageview.frame = self.view.boundsself.imageview.image = UIImage.init(named: "rb02.jpg")maskView = UIView.init()maskView.frame = self.view.frameself.imageview.addSubview(maskView)maskView.backgroundColor = UIColor.graymaskView.alpha = 0.8addrightBtn()}

生成圆形选中区域的方法 circle()

    func cicle() {self.bezeier = UIBezierPath.init(rect: self.imageview.frame)self.circlepath = UIBezierPath.init(arcCenter: CGPoint.init(x: 150, y: 300), radius: 100, startAngle: 0, endAngle: CGFloat(Double.pi * 2.0), clockwise: false)self.bezeier.append(self.circlepath)shaplayer = CAShapeLayer.init()shaplayer.path = self.bezeier.cgPathmaskView.layer.mask = shaplayer}

效果图

重写界面touchmove 方法,  将镂空的圆可以移动.

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {self.bezeier.removeAllPoints()let p = touches.first?.location(in: self.view)self.bezeier = UIBezierPath.init(rect: self.imageview.frame)self.circlepath =  UIBezierPath.init(arcCenter: p!, radius: 100, startAngle: 0, endAngle: CGFloat(Double.pi * 2.0), clockwise: false)self.bezeier.append(self.circlepath)shaplayer.path = self.bezeier.cgPath}

生成图片的方法

    func addrightBtn() {let btn:UIBarButtonItem = UIBarButtonItem.init(title: "生成", style: .plain, target: self, action: #selector(btnaction))self.navigationItem.rightBarButtonItem = btn}@objc func btnaction() {UIGraphicsBeginImageContextWithOptions(self.imageview.frame.size, false, 1)let bezier = self.circlepath//        let bezier = self.bezeierbezier?.addClip()let image = UIImage.init(named: "rb02.jpg")image?.draw(in: self.imageview.frame)let newImage = UIGraphicsGetImageFromCurrentImageContext()self.imageview.image = newImageUIGraphicsEndImageContext()}

效果图

自定义曲线抠图

重写touchmove 绘制滑动曲线

        let p = touches.first?.location(in: self.view)if self.bezeier == nil {self.bezeier = UIBezierPath.init()}if self.bezeier.isEmpty {self.bezeier.move(to: p!)}if shaplayer == nil {shaplayer = CAShapeLayer.init()}self.bezeier.addLine(to: p!)shaplayer.path = self.bezeier.cgPathshaplayer.fillColor = nilshaplayer.lineWidth = 3shaplayer.strokeColor = UIColor.red.cgColorself.imageview.layer.addSublayer(shaplayer)

生成图片的方法, 封闭曲线选择自定的bezier 而不是 那个 circle

    @objc func btnaction() {UIGraphicsBeginImageContextWithOptions(self.imageview.frame.size, false, 1)/// 拿到圆圈的封闭区域
//        let bezier = self.circlepath;/// 拿到自定义曲线的封闭区域let bezier = self.bezeierbezier?.addClip()let image = UIImage.init(named: "rb02.jpg")image?.draw(in: self.imageview.frame)let newImage = UIGraphicsGetImageFromCurrentImageContext()self.imageview.image = newImageUIGraphicsEndImageContext()}

效果图

iOS 任意切割图片相关推荐

  1. python 三维图片 任意切片_python实现对任意大小图片均匀切割的示例

    改代码是在windows 系统下 打开路径和保存路径换成自己的就可以啦~ import numpy as np import matplotlib import os def img_seg(dir) ...

  2. IOS开发之——图片的内存优化

    一 概述 创建Image的方式有两种: UIImage *image=[UIImage imageNamed:imageName]-内存由系统管理 UIImage *image=[UIImage im ...

  3. DOTA数据集应用于Yolo-v4(-Tiny)系列1——切割图片与转换Annotation格式

    文章目录 前言 一.从raw图制作数据集 1.1 安装步骤 1.2 使用方法(以VOC格式为例) 1.3 解读标签(以VOC和YOLO格式为例) 二.对DOTA图片切割 2.1 可以直接使用的YOLO ...

  4. python语言编写一个生成九宫格图片的代码_Python切割图片成九宫格的示例代码

    这篇文字讲述如何使用Python把一张完整的大图切割成9份小图片,制作朋友圈九宫格图文分享. 原图如下: 我们想要利用这张图制作高逼格的九宫格朋友圈分享. 达到类似于这样的效果: 实现原理非常简单,那 ...

  5. Android 调用相册 拍照 实现系统控件缩放 切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test;import java.io.By ...

  6. Android下利用Bitmap切割图片

    在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...

  7. Fresco 二三事:图片处理之旋转、缩放、裁剪切割图片

    关于Fresco加载图片的处理,例如旋转.裁剪切割图片,在官方文档也都有提到,只是感觉写的不太详细,正好最近项目里有类似需求,所以分享一些使用小tip,后面的朋友就不用再走弯路浪费时间了.(测试图片分 ...

  8. java以目标尺寸按原图片像素比缩放切割图片

    2019独角兽企业重金招聘Python工程师标准>>> 需求:原始图片缩放为目标尺寸后,要求缩放后的图片保持原图片的样式不改变,但是缩放后图片的四边可以裁减. 原理:将待裁剪图片宽高 ...

  9. java中如何切割图片_Java 切割图片代码

    Java 切割图片代码 (2012-09-04 10:39:48) 标签: 宽度 切割 源文件 工具类 java package com.lyis.commons.util; import java. ...

最新文章

  1. linux mysql 管理(转载)
  2. SQL Developer更改日期显示格式
  3. stm32串口学习(一)
  4. reactjs回调函数形式的ref:含内联形式回调函数调用次数问题
  5. scipy和statsmodels处理回归
  6. Selenium 显式等待条件及其含义
  7. Teams 的逻辑架构与语音解决方案 - Official Posters Download
  8. 洛谷p1338末日的传说(思维好题,数学)
  9. ssms18还原数据_SSMS 18中的静态数据屏蔽
  10. Leetcode108. 有序数组转为二叉树
  11. 关于Matlab生成批量文件文件名统一数字位数方法
  12. 机器学习:维度灾难(Curse of Dimensionality)
  13. java getname threads_Java8并发教程:Threads和Executors
  14. MacOS下DockerCE的使用方式
  15. 常用的前端还款计算器(包括按月等额本息、按四月等额本息、到期还本付息、到期还本按月付息四种还款方式)
  16. React Native与原生的图片交互问题
  17. XML和JSON-自我小结
  18. 梅科尔工作室-孙溢博-鸿蒙笔记1
  19. Windows版本下安装使用Grafana教程
  20. Cesium中自定义材质material

热门文章

  1. notepad++安装包
  2. 关于冈萨雷斯的《数字图像处理》的坑与资源!
  3. android 系统中修改系统的版本号
  4. 走向2012玛雅之路谭:为什么帝国倾向黑色民族?
  5. WRF学习笔记之四:撰写WPS intermediate file添加海冰场/NCL学习/WRF进阶:如何向WRF添加额外气象场?
  6. Angularjs学习笔记1_基本技巧
  7. android 2.2下载地址,Windows下载android2.2完整源码
  8. 图标搜索网站 http://easyicon.net/
  9. 熟练成就创造——MathWorks全球副总裁Richard Rovner、产品市场经理赵志宏专访
  10. OSChina 周日乱弹 —— 和妹子约会,要会聊天