利用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中的True,False条件判断实例分析
Jan 12 Python
python爬虫之urllib3的使用示例
Jul 09 Python
用python生成1000个txt文件的方法
Oct 25 Python
wxPython实现整点报时
Nov 18 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
opencv+python实现均值滤波
Feb 19 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
matplotlib交互式数据光标mpldatacursor的实现
Feb 03 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 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中static,const与define的使用区别
2013/06/18 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
在js中使用"with"语句中跨frame的变量引用问题
2007/03/08 Javascript
Add a Table to a Word Document
2007/06/15 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
Python中使用中文的方法
2011/02/19 Python
python解析html开发库pyquery使用方法
2014/02/07 Python
Python selenium 三种等待方式解读
2016/09/15 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
python导入坐标点的具体操作
2019/05/10 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
新领导上任欢迎词
2014/01/13 职场文书
红旗方阵解说词
2014/02/12 职场文书
违纪检讨书范文
2015/01/27 职场文书
焦点访谈观后感
2015/06/11 职场文书
单位病假条范文
2015/08/17 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS