利用python编写一个图片主色转换的脚本


Posted in Python onDecember 07, 2017

前言

最近由于项目特需老是替换主题颜色,同时app里一些资源icon图片主色也要改,美工不提供切图只能靠自己了,开始想在iconfont上面找但是数量比较多太浪费时间,然后就想到python的Pillow在图像处理方便很强大。

Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

本文就编写了一个批量替换图片主色的脚本changeImageColor.py。

实现思路

      1.pip 安装Pillow库引入Image类

      2.在当前目录下创建存放转换后图片目录

      3.获取当前目录路径,以及图片文件

      4.遍历所有图片文件并创建对应Image对象

      5.获取Image对象背景颜色rgba值

      6.遍历Image对象所有像素点

      7.把不是背景像素点颜色替换为要转换输入颜色值

      8.保存Image对象到新目录下面

代码实现

from PIL import Image
import os
class ChangeImageColor(object):
  @classmethod
  def startHandle(self, rgb):
    # 获取当前路径,并创建新目录用于输出结果image
    path = os.getcwd() + '/images/res'
    npath = os.getcwd() + '/images/res/result/'
    if not os.path.exists(npath):
      os.makedirs(npath)
    else:
      # 如果存在相同新目录那么删除下面文件
      for root, dirs, files in os.walk(npath):
        for file_name in files:
          os.remove(npath + file_name)    
    # 新颜色值
    nr,ng,nb = rgb
    # 存放背景颜色
    br,bg,bb, ba = 0, 0, 0, 0
    # 遍历目录
    for root, dirs, files in os.walk(path):
      print('root: ', root) # 当前目录路径
      print('dirs: ', dirs) # 当前路径下所有子目录
      print('files: ', files) # 当前路径下所有非目录子文件      
      # 遍历下所有图片文件
      for file_name in files:
        if file_name != '.DS_Store':
          image = Image.open(root + '/' + file_name)
          if image is not None:
            image_width, image_height = image.size
            # 遍历Image每个像素
            for i in range(image_width):
              for j in range(image_height):
                xy = (i,j)
                # 下面是获取像素和比较像素
                color = image.getpixel(xy)
                color_num = len(color)
                # 判断颜色是否有alpha值
                if color_num == 4:
                  r, g, b, a = color
                  if i == 0 and j == 0:
                    br, bg, bb, ba = color
                  if br != r or bg != g or bb != b:
                    # 替换像素并保留alpha值
                    image.putpixel(xy, (nr, ng, nb,a))
                elif color_num == 3:
                  r, g, b = color
                  if i == 0 and j == 0:
                    br, bg, bb = color
                  if br != r or bg != g or bb != b:                    image.putpixel(xy, (nr, ng, nb))

            image.save(npath + file_name)
  # 把16进制转换为rgb
  @classmethod
  def hex2rgb(self, hexcolor):
    rgb = ((hexcolor >> 16) & 0xff,
        (hexcolor >> 8) & 0xff,
        hexcolor & 0xff
        )
    return rgb
if __name__ == '__main__':
  hexColor = int(input('请输入新16进制颜色值:'), 16)
  ChangeImageColor.startHandle(ChangeImageColor.hex2rgb(hexColor))

演示

利用python编写一个图片主色转换的脚本

转换结果result 目录下就是转换新图片

利用python编写一个图片主色转换的脚本

python真的很不错^_^。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python常规方法实现数组的全排列
Mar 17 Python
python实现的文件同步服务器实例
Jun 02 Python
十条建议帮你提高Python编程效率
Feb 16 Python
python 排序算法总结及实例详解
Sep 28 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
python 如何快速复制序列
Sep 07 Python
python super()函数的基本使用
Sep 10 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
python八大排序算法速度实例对比
Dec 06 #Python
Python语言实现将图片转化为html页面
Dec 06 #Python
Python实现比较扑克牌大小程序代码示例
Dec 06 #Python
Python3简单实例计算同花的概率代码
Dec 06 #Python
Python基于回溯法解决01背包问题实例
Dec 06 #Python
Python基于动态规划算法解决01背包问题实例
Dec 06 #Python
Python机器学习之决策树算法实例详解
Dec 06 #Python
You might like
PHP在线生成二维码代码(google api)
2013/06/03 PHP
php表单处理操作
2017/11/16 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript 常用方法总结
2009/06/03 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
浅谈python中的数字类型与处理工具
2017/08/02 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
Shell编程面试题
2012/05/30 面试题
师恩难忘教学反思
2014/04/27 职场文书
工作失职检讨书500字
2014/10/17 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
四年级语文教学反思
2016/03/03 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP