利用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检测手机QQ在线状态的脚本代码
Feb 10 Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
5分钟 Pipenv 上手指南
Dec 20 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python 随机森林算法及其优化详解
Jul 11 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
如何基于Python按行合并两个txt
Nov 03 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
pytorch实现手写数字图片识别
May 20 Python
Python经常使用的一些内置函数
Apr 11 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
weiphp微信公众平台授权设置
2016/01/04 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
基于jQuery实现选项卡效果
2017/01/04 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
python简单验证码识别的实现方法
2019/05/10 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
远程教育心得体会
2014/01/03 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
vue中div禁止点击事件的实现
2022/04/02 Vue.js
解决MySQL报“too many connections“错误
2022/04/19 MySQL