利用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实现简单的计时器功能函数
Mar 14 Python
用Python遍历C盘dll文件的方法
May 06 Python
python搭建微信公众平台
Feb 09 Python
python实现二分查找算法
Sep 21 Python
Python+Turtle动态绘制一棵树实例分享
Jan 16 Python
python发送邮件脚本
May 22 Python
Python 实现域名解析为ip的方法
Feb 14 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
python中time库的实例使用方法
Oct 31 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
python中的getter与setter你了解吗
Mar 24 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
比较全的PHP 会话(session 时间设定)使用入门代码
2008/06/05 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
JQuery 常用操作代码
2010/03/14 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
Python 学习教程之networkx
2019/04/15 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
考博自荐信
2013/10/25 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
个人汇报材料范文
2014/12/30 职场文书
怒海潜将观后感
2015/06/11 职场文书
师范生见习总结范文
2015/06/23 职场文书
2015年高三教学工作总结
2015/07/21 职场文书