python編寫圖片主色轉換指令碼

WHC發表於2019-03-04

作者:吳海超

個人網站: 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

個人開源專案

相關文章