利用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的while循环中使用else以及循环嵌套的用法
Oct 14 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
详解python3中tkinter知识点
Jun 21 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
Django框架实现的简单分页功能示例
Dec 04 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Python如何读取、写入CSV数据
Jul 28 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实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
PHP安全下载文件的方法
2016/04/07 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
jquery编写日期选择器
2017/03/16 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
详解Django中Request对象的相关用法
2015/07/17 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python处理html转义字符的方法详解
2016/07/01 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
简历的自我评价
2014/02/03 职场文书
顶碗少年教学反思
2014/02/21 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
python 如何在list中找Topk的数值和索引
2021/05/20 Python
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android