Swift - 图片去色 图片灰色显示
参考地址:
实现方法一:Swift 实现更改图片的颜色
实现方法二:iOS中使用blend改变图片颜色
当前网上搜到的方法几乎都是这两种。但是不知道在我的代码中不能完美完美实现。
- 第一种方法实现,发现是在原来的颜色上盖上一种半透明的灰色遮罩。原来的颜色还是能展示。
后者参数参照喵神的使用 overlay 保留图片的灰度
let grayImage = image?.imageWithTintColor(tintColor: .black, blendMode: .overlay)
方法实现
func imageWithTintColor(tintColor:UIColor, blendMode:CGBlendMode) -> UIImage? {UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0)tintColor.setFill()let bounds = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)UIRectFill(bounds)self.draw(in: bounds, blendMode: blendMode, alpha: 1.0)if blendMode != .destinationIn {self.draw(in: bounds, blendMode: .destinationIn, alpha: 1.0)}let tintedImage = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return tintedImage}
当使用的参数为 .gray
当使用的参数是.black
和需求不一致,变成了全黑没有保留原来图片的灰度。(毕竟时间过去太久,如果有朋友知道问题在哪,麻烦告知一下,谢谢)
- 第二种方法实现,发现原来透明的背景变成了黑色,需要再做一步扣除黑色背景的操作。
let grayImage = image?.grayImage()?.transparentColor(colorMasking: [0, 32, 0, 32, 0, 32])
图片去色
func grayImage() -> UIImage?{UIGraphicsBeginImageContext(self.size)let colorSpace = CGColorSpaceCreateDeviceGray()let context = CGContext(data: nil , width: Int(self.size.width), height: Int(self.size.height),bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: CGImageAlphaInfo.none.rawValue)context?.draw(self.cgImage!, in: CGRect.init(x: 0, y: 0, width: self.size.width, height: self.size.height))let cgImage = context!.makeImage()let grayImage = UIImage(cgImage: cgImage!, scale: self.scale, orientation: self.imageOrientation)return grayImage}
当前图片展示是这种形式,多出来了一个黑色背景
扣除黑色背景(Swift - 去处图片的白色、黑色背景(使UIImage背景透明))
func transparentColor(colorMasking:[CGFloat]) -> UIImage? {if let rawImageRef = self.cgImage {UIGraphicsBeginImageContext(self.size)if let maskedImageRef = rawImageRef.copy(maskingColorComponents: colorMasking) {let context: CGContext = UIGraphicsGetCurrentContext()!context.translateBy(x: 0.0, y: self.size.height)context.scaleBy(x: 1.0, y: -1.0)context.draw(maskedImageRef, in: CGRect(x:0, y:0, width:self.size.width, height:self.size.height))let result = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return result}}return nil}
这样拿到的就是我想要的,图片去色且保留了图片的灰度展示
Swift - 图片去色 图片灰色显示相关推荐
- Android笔记之ImageView设置图片以灰色显示
有时候我们需要将ImageView加载的图片去彩色,以黑白灰度显示,如qq的不在线头像. 第一种,我们可以通过将彩色bitmap图转换成黑白灰度bitmap图: /*** 图片去色,返回灰度图片* @ ...
- Android之给图片去色,返回灰度图片以及ColorMatrix中setSaturation方法的用法
原图: 效果图: 实现以上效果其实很简单,直接上代码: public class MainActivity extends Activity {private Button btn_start;pri ...
- css炫酷标题,纯css3鼠标滑过图片炫酷标题显示特效
很多网站的图片鼠标滑过显示标题效果都是使用jQuery来完成的,现在,我们可以使用CSS3 animations来完成同样惊艳的效果.如果你对CSS3 animations还不了解,请先阅读CSS3 ...
- python运行完不能显示图_【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片...
[问题] 在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片:openedImg = Image.open(saveToFile); print "open ...
- layui上传图片列表展示_layui怎么做图片在列表中显示 | 学步园
layui table中显示图片的方法: 图片需要用到模板.templet: 注意div不可省略,48px指的是div的高度,如果要决定img图片的高度,需要单独设计style ',style:'he ...
- ado.net图片点击刷新_华为官方解答为何微信保存的图片不在图库显示
集微网12月31日消息(文/数码控),很多人在使用智能手机的时候会发现一些奇怪的事情,比如为何微信保存的图片不在图库显示,针对该问题,华为旗下的花粉俱乐部特地发文进行解答. 花粉俱乐部认为以下情况,导 ...
- [原创][连载].基于SOPC的简易数码相框 - Nios II SBTE部分(软件部分) - 从SD卡内读取图片文件,然后显示在TFT-LCD上...
实在很抱歉,时间紧张,我只讲怎样从SD卡内读取bin文件(二进制文件),然后现在TFT-LCD上. 准备工具 1. Image2Lcd.zip 操作步骤 步骤1 寻找或制作240x320的图片 简单起 ...
- SpringBoot整合springDataJpa实现图片上传和显示
目录 使用工具 使用说明 使用maven的pom.xml文件 环境搭建 代码示例 SQL代码 java目录 Img.java MyWebMvcConfigurerAdapter.java FileCo ...
- html加载完显示图片,js图片未加载完显示loading效果
js图片未加载完显示loading效果 img{float:left;200px;height:200px;margin:0 10px 10px 0} //判断浏览器 var Browser=new ...
- Android之点击图片底部出现灰色圆圈效果
1 需求 点击图片底部出现灰色圆圈效果 2 代码实现 1.num_oval_gray_def.xml <?xml version="1.0" encoding="u ...
最新文章
- python 爬虫实例 电影-Python爬虫教程-17-ajax爬取实例(豆瓣电影)
- 记录一次最新版MySQL-server-5.6.20-1.el6.x86_64.rpm的安装
- 并发锁之二:ReentrantReadWriteLock读写锁
- win7笔记本电脑如何分割和重命名磁盘
- 使用 Python 实现鼠标键盘自动化
- MS SQL 2008认证考试大纲
- log4j mysql_log4j写入mysql数据库 | 学步园
- 中国联通公布8月运营数据出炉 4G用户大幅度提升
- apollomq mysql_Apollo 配置中心安装使用
- 菜单关联注册/注销 dll/ocx 文件
- Sharepoint学习笔记--- 快速确定VisualStudio2010当前Project的assembly name
- 小程序开发合同_微信小程序怎么做?微信小程序制作流程? | 微信开放社区
- 6个裂变获客增长方法
- python 百度翻译爬虫(可翻译句子及文章)(偷偷说一句,保姆级教程哦)
- 360主机卫士linux安装软件,360主机卫士Linux专杀版0.4.1 官方版(32位+64位)下载_云间下载...
- common pool 数据库连接池泄露排查
- python图片切割与合并
- linux软路由设计博客,用Ubuntu来做个软路由
- Java实现 for循环输出空心的菱形 在main方法中调用printHollowRhombus()方法完成10行的空心菱形输出,其中 printHollo
- String字符串的相关语法及JPI
热门文章
- 离散数学:等价关系与集合覆盖
- css免费网站,5个免费网站模板|免费CSS模板网站汇总
- 自助友情链接交换网站php源码,友情链接交换系统
- Citrix发布支持Framehawk技术的HDX协议,用户体验优势进一步扩大
- Go Web编程(Go语言性能好 语法简单 开发效率高 )
- 【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)
- Android Studio 简单的登陆界面实现(含源码)
- Pycharm导入python项目
- python深度学习——案例讲解
- Linux环境下编译运行大型C语言项目