利用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字符串替换示例
Apr 24 Python
Python深入学习之闭包
Aug 31 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
python 读取修改pcap包的例子
Jul 23 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
NumPy排序的实现
Jan 21 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
7个关于Python的经典基础案例
Nov 07 Python
Matplotlib绘制条形图的方法你知道吗
Mar 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 Directory 函数的详解
2013/03/07 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php表单敏感字符过滤类
2014/12/08 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
django的settings中设置中文支持的实现
2019/04/28 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
工作表现自我评价
2014/02/08 职场文书
社团活动总结范文
2014/04/26 职场文书
星级党支部申报材料
2014/05/31 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
保护校园环境倡议书
2015/04/28 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python