参考地址:
实现方法一: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 - 图片去色 图片灰色显示相关推荐

  1. Android笔记之ImageView设置图片以灰色显示

    有时候我们需要将ImageView加载的图片去彩色,以黑白灰度显示,如qq的不在线头像. 第一种,我们可以通过将彩色bitmap图转换成黑白灰度bitmap图: /*** 图片去色,返回灰度图片* @ ...

  2. Android之给图片去色,返回灰度图片以及ColorMatrix中setSaturation方法的用法

    原图: 效果图: 实现以上效果其实很简单,直接上代码: public class MainActivity extends Activity {private Button btn_start;pri ...

  3. css炫酷标题,纯css3鼠标滑过图片炫酷标题显示特效

    很多网站的图片鼠标滑过显示标题效果都是使用jQuery来完成的,现在,我们可以使用CSS3 animations来完成同样惊艳的效果.如果你对CSS3 animations还不了解,请先阅读CSS3 ...

  4. python运行完不能显示图_【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片...

    [问题] 在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片:openedImg = Image.open(saveToFile); print "open ...

  5. layui上传图片列表展示_layui怎么做图片在列表中显示 | 学步园

    layui table中显示图片的方法: 图片需要用到模板.templet: 注意div不可省略,48px指的是div的高度,如果要决定img图片的高度,需要单独设计style ',style:'he ...

  6. ado.net图片点击刷新_华为官方解答为何微信保存的图片不在图库显示

    集微网12月31日消息(文/数码控),很多人在使用智能手机的时候会发现一些奇怪的事情,比如为何微信保存的图片不在图库显示,针对该问题,华为旗下的花粉俱乐部特地发文进行解答. 花粉俱乐部认为以下情况,导 ...

  7. [原创][连载].基于SOPC的简易数码相框 - Nios II SBTE部分(软件部分) - 从SD卡内读取图片文件,然后显示在TFT-LCD上...

    实在很抱歉,时间紧张,我只讲怎样从SD卡内读取bin文件(二进制文件),然后现在TFT-LCD上. 准备工具 1. Image2Lcd.zip 操作步骤 步骤1 寻找或制作240x320的图片 简单起 ...

  8. SpringBoot整合springDataJpa实现图片上传和显示

    目录 使用工具 使用说明 使用maven的pom.xml文件 环境搭建 代码示例 SQL代码 java目录 Img.java MyWebMvcConfigurerAdapter.java FileCo ...

  9. html加载完显示图片,js图片未加载完显示loading效果

    js图片未加载完显示loading效果 img{float:left;200px;height:200px;margin:0 10px 10px 0} //判断浏览器 var Browser=new ...

  10. Android之点击图片底部出现灰色圆圈效果

    1 需求 点击图片底部出现灰色圆圈效果 2 代码实现 1.num_oval_gray_def.xml <?xml version="1.0" encoding="u ...

最新文章

  1. python 爬虫实例 电影-Python爬虫教程-17-ajax爬取实例(豆瓣电影)
  2. 记录一次最新版MySQL-server-5.6.20-1.el6.x86_64.rpm的安装
  3. 并发锁之二:ReentrantReadWriteLock读写锁
  4. win7笔记本电脑如何分割和重命名磁盘
  5. 使用 Python 实现鼠标键盘自动化
  6. MS SQL 2008认证考试大纲
  7. log4j mysql_log4j写入mysql数据库 | 学步园
  8. 中国联通公布8月运营数据出炉 4G用户大幅度提升
  9. apollomq mysql_Apollo 配置中心安装使用
  10. 菜单关联注册/注销 dll/ocx 文件
  11. Sharepoint学习笔记--- 快速确定VisualStudio2010当前Project的assembly name
  12. 小程序开发合同_微信小程序怎么做?微信小程序制作流程? | 微信开放社区
  13. 6个裂变获客增长方法
  14. python 百度翻译爬虫(可翻译句子及文章)(偷偷说一句,保姆级教程哦)
  15. 360主机卫士linux安装软件,360主机卫士Linux专杀版0.4.1 官方版(32位+64位)下载_云间下载...
  16. common pool 数据库连接池泄露排查
  17. python图片切割与合并
  18. linux软路由设计博客,用Ubuntu来做个软路由
  19. Java实现 for循环输出空心的菱形 在main方法中调用printHollowRhombus()方法完成10行的空心菱形输出,其中 printHollo
  20. String字符串的相关语法及JPI

热门文章

  1. 离散数学:等价关系与集合覆盖
  2. css免费网站,5个免费网站模板|免费CSS模板网站汇总
  3. 自助友情链接交换网站php源码,友情链接交换系统
  4. Citrix发布支持Framehawk技术的HDX协议,用户体验优势进一步扩大
  5. Go Web编程(Go语言性能好 语法简单 开发效率高 )
  6. 【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)
  7. Android Studio 简单的登陆界面实现(含源码)
  8. Pycharm导入python项目
  9. python深度学习——案例讲解
  10. Linux环境下编译运行大型C语言项目