iOS 任意切割图片
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 任意切割图片相关推荐
- python 三维图片 任意切片_python实现对任意大小图片均匀切割的示例
改代码是在windows 系统下 打开路径和保存路径换成自己的就可以啦~ import numpy as np import matplotlib import os def img_seg(dir) ...
- IOS开发之——图片的内存优化
一 概述 创建Image的方式有两种: UIImage *image=[UIImage imageNamed:imageName]-内存由系统管理 UIImage *image=[UIImage im ...
- DOTA数据集应用于Yolo-v4(-Tiny)系列1——切割图片与转换Annotation格式
文章目录 前言 一.从raw图制作数据集 1.1 安装步骤 1.2 使用方法(以VOC格式为例) 1.3 解读标签(以VOC和YOLO格式为例) 二.对DOTA图片切割 2.1 可以直接使用的YOLO ...
- python语言编写一个生成九宫格图片的代码_Python切割图片成九宫格的示例代码
这篇文字讲述如何使用Python把一张完整的大图切割成9份小图片,制作朋友圈九宫格图文分享. 原图如下: 我们想要利用这张图制作高逼格的九宫格朋友圈分享. 达到类似于这样的效果: 实现原理非常简单,那 ...
- Android 调用相册 拍照 实现系统控件缩放 切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test;import java.io.By ...
- Android下利用Bitmap切割图片
在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...
- Fresco 二三事:图片处理之旋转、缩放、裁剪切割图片
关于Fresco加载图片的处理,例如旋转.裁剪切割图片,在官方文档也都有提到,只是感觉写的不太详细,正好最近项目里有类似需求,所以分享一些使用小tip,后面的朋友就不用再走弯路浪费时间了.(测试图片分 ...
- java以目标尺寸按原图片像素比缩放切割图片
2019独角兽企业重金招聘Python工程师标准>>> 需求:原始图片缩放为目标尺寸后,要求缩放后的图片保持原图片的样式不改变,但是缩放后图片的四边可以裁减. 原理:将待裁剪图片宽高 ...
- java中如何切割图片_Java 切割图片代码
Java 切割图片代码 (2012-09-04 10:39:48) 标签: 宽度 切割 源文件 工具类 java package com.lyis.commons.util; import java. ...
最新文章
- linux mysql 管理(转载)
- SQL Developer更改日期显示格式
- stm32串口学习(一)
- reactjs回调函数形式的ref:含内联形式回调函数调用次数问题
- scipy和statsmodels处理回归
- Selenium 显式等待条件及其含义
- Teams 的逻辑架构与语音解决方案 - Official Posters Download
- 洛谷p1338末日的传说(思维好题,数学)
- ssms18还原数据_SSMS 18中的静态数据屏蔽
- Leetcode108. 有序数组转为二叉树
- 关于Matlab生成批量文件文件名统一数字位数方法
- 机器学习:维度灾难(Curse of Dimensionality)
- java getname threads_Java8并发教程:Threads和Executors
- MacOS下DockerCE的使用方式
- 常用的前端还款计算器(包括按月等额本息、按四月等额本息、到期还本付息、到期还本按月付息四种还款方式)
- React Native与原生的图片交互问题
- XML和JSON-自我小结
- 梅科尔工作室-孙溢博-鸿蒙笔记1
- Windows版本下安装使用Grafana教程
- Cesium中自定义材质material
热门文章
- notepad++安装包
- 关于冈萨雷斯的《数字图像处理》的坑与资源!
- android 系统中修改系统的版本号
- 走向2012玛雅之路谭:为什么帝国倾向黑色民族?
- WRF学习笔记之四:撰写WPS intermediate file添加海冰场/NCL学习/WRF进阶:如何向WRF添加额外气象场?
- Angularjs学习笔记1_基本技巧
- android 2.2下载地址,Windows下载android2.2完整源码
- 图标搜索网站 http://easyicon.net/
- 熟练成就创造——MathWorks全球副总裁Richard Rovner、产品市场经理赵志宏专访
- OSChina 周日乱弹 —— 和妹子约会,要会聊天