利用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 10 Python
python动态加载包的方法小结
Apr 18 Python
使用python实现生成用户信息
Mar 20 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
python高级特性和高阶函数及使用详解
Oct 17 Python
Python秒算24点实现及原理详解
Jul 29 Python
python编写猜数字小游戏
Oct 06 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
详解Python yaml模块
Sep 23 Python
python 绘制正态曲线的示例
Sep 24 Python
python实现扫雷游戏的示例
Oct 20 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 断点续传实例详解
2017/11/11 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
Python高级用法总结
2018/05/26 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
简单了解python协程的相关知识
2019/08/31 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
工会主席岗位责任制
2014/02/11 职场文书
法语专业求职信
2014/07/20 职场文书
房屋认购协议书
2015/01/29 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
基于python实现银行管理系统
2021/04/20 Python
解析MySQL索引的作用
2022/03/03 MySQL