python编写图片主色转换脚本

作者:吴海超

个人网站: www.wuhaichao.com

最近由于项目特需老是替换主题颜色,同时app里一些资源icon图片主色也要改,美工不提供切图只能靠自己了,开始想在iconfont上面找但是数量比较多太浪费时间,然后就想到python的Pillow在图像处理方便很强大就开始编写一个批量替换图片主色的脚本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真的很不错^_^。

个人网站: www.wuhaichao.com

个人开源项目

    原文作者:python入门
    原文地址: https://juejin.im/post/5a2687516fb9a045132a8e8a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞