做者:吳海超python
最近因爲項目特需總是替換主題顏色,同時app裏一些資源icon圖片主色也要改,美工不提供切圖只能靠本身了,開始想在iconfont上面找可是數量比較多太浪費時間,而後就想到python的Pillow在圖像處理方便很強大就開始編寫一個批量替換圖片主色的腳本changeImageColor.py。github
1.pip 安裝Pillow庫引入Image類app
2.在當前目錄下建立存放轉換後圖片目錄網站
3.獲取當前目錄路徑,以及圖片文件spa
4.遍歷全部圖片文件並建立對應Image對象code
5.獲取Image對象背景顏色rgba值cdn
6.遍歷Image對象全部像素點對象
7.把不是背景像素點顏色替換爲要轉換輸入顏色值blog
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))
複製代碼