利用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实现的ini文件操作类分享
Nov 20 Python
初学Python函数的笔记整理
Apr 07 Python
深入探究Python中变量的拷贝和作用域问题
May 05 Python
Django与JS交互的示例代码
Aug 23 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
python实现内存监控系统
Mar 07 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
Tensorflow限制CPU个数实例
Feb 06 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
基于Python实现天天酷跑功能
Jan 06 Python
python批量提取图片信息并保存的实现
Feb 05 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按字符串长度分割成数组代码
2015/05/17 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
Json解析的方法小结
2016/06/22 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
Python和php通信乱码问题解决方法
2014/04/15 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
python 常用的基础函数
2018/07/10 Python
Python小进度条显示代码
2019/03/05 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
keras实现多种分类网络的方式
2020/06/11 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
三个儿子教学反思
2014/02/03 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
民主生活会意见
2015/06/05 职场文书
离婚协议书范文2016
2016/03/18 职场文书
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery