利用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装饰器
May 09 Python
Python常用内置模块之xml模块(详解)
May 23 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
django 外键model的互相读取方法
Dec 15 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
python 解决函数返回return的问题
Dec 05 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 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 ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
vue路由懒加载的实现方法
2018/03/12 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[00:14]护身甲盾
2019/03/06 DOTA
在Python中使用列表生成式的教程
2015/04/27 Python
python多进程实现进程间通信实例
2017/11/24 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
护士专业推荐信
2013/11/02 职场文书
法学专业求职信
2014/07/15 职场文书
活着观后感
2015/06/03 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
安全生产感想
2015/08/07 职场文书
高中政治教学反思
2016/02/23 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python