UIImage图标换色和变换大小

这里的图片大都指只有两个色的图标,有时候我们的图标需要根据不同的状态显示不同的颜色,有一种简单的处理方式是,将不同状态的颜色图标都切出来,变换状态的时候直接使用相应的颜色图标,这样会导致资源图标增多,安装包变大。还有就是使用比较流行的iconFont模式。最后也可以让我们编码人员直接改变图标的颜色。

方法一、使用tint颜色改变(最简单的)

要求:你的明白tint的概念和使用

a.如果你是将图标导如到Assets.xcassets文件夹,可以选择将你要改变颜色的图标的render as 属性设为 模板图片(原本图标你应该保留一份),操作如图

之后在代码逻辑中使用该模板图片,【重点】设置tintColor即可,记得设置哟,不然就是系统的蓝色拉。

b.如果你是直接将图片导入到项目,就需要用代码,代码如下:

var image1 = UIImage(named:"test") //原图var templateImage = image1?.withRenderingMode(.alwaysTemplate) //模型图(可以改变颜色了)//然后根据情况将需要的图片加到视图中。//【注意】需要设置视图的tintColor值,否则就会用系统的或者父视图的tint色
        //如:self.imageView.image = templateImage ; self.imageView.tintColor = .red

建议使用b.可以保留者原图。

方法二、通过代码再画布上下文中设置。

a.Swift参考代码

/**//对图片着色//参数:blendMode,参考下面链接*/func changeColor(_ color:UIColor, blendMode:CGBlendMode) -> UIImage {//方式一(可以)UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale)let context = UIGraphicsGetCurrentContext()color.setFill()//移动图片context!.translateBy(x: 0, y: self.size.height)context!.scaleBy(x: 1.0, y: -1.0)let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)context!.draw(self.cgImage!, in: rect)//模式配置context!.setBlendMode(blendMode)context!.addRect(rect)context!.drawPath(using: CGPathDrawingMode.fill)//创建获取图片let coloredImage = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return coloredImage!
}

BlendMode参数值解释 (不一定适用于OC)

b. OC参考代码片段:

//纯色化图片- (UIImage *)setImage:(UIImage *)image toColor:(UIColor *)color{UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);CGContextRef context = UIGraphicsGetCurrentContext();CGContextTranslateCTM(context, 0, image.size.height);/没有这部分图片会跳动CGContextScaleCTM(context, 1.0, -1.0);CGContextSetBlendMode(context, kCGBlendModeNormal);CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);/CGContextClipToMask(context, rect, image.CGImage);[color setFill];CGContextFillRect(context, rect);UIImage *colorImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return colorImage;
}

将图片缩小化

swift版本

/***改变图片大小(缩小)*/func changeSize(_ size:CGSize) -> UIImage {UIGraphicsBeginImageContext(size)self.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))let newImage = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return newImage!}

OC版本

//缩小图片
- (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)size{UIGraphicsBeginImageContext(size);[image drawInRect:CGRectMake(0, 0, size.width, size.height)];UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();_testImage = newImage;return newImage;
}

iOS开发图片纯色填充(两种方式)和缩小图片相关推荐

  1. Android点击图片随机,android 设置图片随机出现-两种方式

    android 设置图片随机出现-两种方式, 第一种方式:得到图片对应的Drawable实例,通过setImageDrawable(drawable)实现 //ImageView对应的id ivBg ...

  2. android 设置图片随机出现-两种方式

    android 设置图片随机出现-两种方式, 第一种方式:得到图片对应的Drawable实例,通过setImageDrawable(drawable)实现 //ImageView对应的idivBg = ...

  3. Python:实现图片裁剪的两种方式——Pillow和OpenCV

    原文:https://blog.csdn.net/hfutdog/article/details/82351549 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还 ...

  4. Python图片裁剪的两种方式——Pillow和OpenCV

    本文参考Python图片裁剪的两种方式--Pillow和OpenCV并进行了一些更新 感谢作者:hfutdog 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一 ...

  5. python opencv 裁剪图片_Python图片裁剪的两种方式——Pillow和OpenCV

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. OpenCV ...

  6. Python实现图片裁剪的两种方式——Pillow和OpenCV

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. 首先,我们有 ...

  7. android 图片方法,分享实现Android图片选择的两种方式

    Android选择图片的两种方式: 第一种:单张选取 通过隐式启动activity,跳转到相册选择一张返回结果 关键代码如下: 发送请求: private static final int PICTU ...

  8. python-网络图片下载(两种方式)

    利用python进行网络图片下载(两种方式) 1:方式一 1:代码 # coding=utf-8 """ @author: jiajiknag 程序功能: 图片批量下载_ ...

  9. iOS的音讯通知有两种方式,Badge Notification和Alert Notification

    当应用程序不处于前台运转中时,音讯通知能将某些信息及时告知用户.比方收到新音讯.收到新邮 件.程序下载已完成或者待办事项行将开端等.目前各挪动平台上抵消息通知的设计均有所差异,各有利害.这里整理了iO ...

最新文章

  1. python3中tkinter button属性_Python3 tkinter基础 Button bg 按钮的背景颜色
  2. Python使用matplotlib可视化多个时间序列数据、添加双Y轴、以显示具有不同尺度的时间序列数据(secondary y axis)
  3. numpy生成随机数
  4. GridView列值绑定
  5. python列表片段_Python列表片段索引操作,python
  6. Qt for Android 开发环境配置
  7. python引用自己的文件的一切问题
  8. 百度网盘不限速下载神器献给你
  9. linux gcc编译只能编译一条,请教一个gcc编译器的问题啊
  10. 戴志坚接替李小加出任职港交所行政总裁 基本年薪700万港元
  11. 运营级如意影视源码+完整类库/无限增删解析API
  12. 智慧城市是如何用大数据建成的?
  13. Mahony 互补滤波
  14. ARFoundation系列讲解 - 66 AR虚拟试戴
  15. Java private方法访问
  16. 问题 F: 求一个3*3矩阵对角线元素之和
  17. 沈华伟老师图卷积神经网络教学视频笔记
  18. 英语发音规则---I字母常见发音组合有哪些
  19. Cesium入门(五):加载WMTS瓦片地图服务
  20. struct和typedef struct的区别

热门文章

  1. Ocelot(二)- 请求聚合与负载均衡
  2. sharepoint模拟用户
  3. ASP.NET MVC中你必须知道的13个扩展点
  4. NSOperation下载网络图片(四)
  5. error BK1506
  6. linux性能优化实战-内存性能指标
  7. WebMatrix 3发布了!
  8. 2011-02 Emacs相关闪存
  9. 现在的Android程序员为什么会感到焦虑?焦虑的源头在哪里?该怎么去缓解焦虑呢?——没有无中生有的贩卖焦虑,只有你的挣扎和不甘。
  10. 算法----- 下一个更大元素 I