利用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 深入理解yield
Sep 06 Python
python爬虫常用的模块分析
Aug 29 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
python实现nao机器人手臂动作控制
Apr 29 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
Python devel安装失败问题解决方案
Jun 09 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 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的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
postman传递当前时间戳实例详解
2019/09/14 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
2014年秋季新学期寄语
2014/08/02 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
前台接待员岗位职责
2015/04/15 职场文书
教师节主持词开场白
2015/05/29 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
商业计划书范文
2019/04/24 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
解析Java异步之call future
2021/06/14 Java/Android
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
Win11 BitLocker 驱动器加密
2022/04/19 数码科技
Springboot中如何自动转JSON输出
2022/06/16 Java/Android