利用python編寫(xiě)一個(gè)圖片主色轉(zhuǎn)換的腳本
前言
最近由于項(xiàng)目特需老是替換主題顏色,同時(shí)app里一些資源icon圖片主色也要改,美工不提供切圖只能靠自己了,開(kāi)始想在iconfont上面找但是數(shù)量比較多太浪費(fèi)時(shí)間,然后就想到python的Pillow在圖像處理方便很強(qiáng)大。
Pillow是Python里的圖像處理庫(kù)(PIL:Python Image Library),提供了了廣泛的文件格式支持,強(qiáng)大的圖像處理能力,主要包括圖像儲(chǔ)存、圖像顯示、格式轉(zhuǎn)換以及基本的圖像處理操作等。
本文就編寫(xiě)了一個(gè)批量替換圖片主色的腳本changeImageColor.py。
實(shí)現(xiàn)思路
1.pip 安裝Pillow庫(kù)引入Image類(lèi)
2.在當(dāng)前目錄下創(chuàng)建存放轉(zhuǎn)換后圖片目錄
3.獲取當(dāng)前目錄路徑,以及圖片文件
4.遍歷所有圖片文件并創(chuàng)建對(duì)應(yīng)Image對(duì)象
5.獲取Image對(duì)象背景顏色rgba值
6.遍歷Image對(duì)象所有像素點(diǎn)
7.把不是背景像素點(diǎn)顏色替換為要轉(zhuǎn)換輸入顏色值
8.保存Image對(duì)象到新目錄下面
代碼實(shí)現(xiàn)
from PIL import Image
import os
class ChangeImageColor(object):
@classmethod
def startHandle(self, rgb):
# 獲取當(dāng)前路徑,并創(chuàng)建新目錄用于輸出結(jié)果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) # 當(dāng)前目錄路徑
print('dirs: ', dirs) # 當(dāng)前路徑下所有子目錄
print('files: ', files) # 當(dāng)前路徑下所有非目錄子文件
# 遍歷下所有圖片文件
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每個(gè)像素
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進(jìn)制轉(zhuǎn)換為rgb
@classmethod
def hex2rgb(self, hexcolor):
rgb = ((hexcolor >> 16) & 0xff,
(hexcolor >> 8) & 0xff,
hexcolor & 0xff
)
return rgb
if __name__ == '__main__':
hexColor = int(input('請(qǐng)輸入新16進(jìn)制顏色值:'), 16)
ChangeImageColor.startHandle(ChangeImageColor.hex2rgb(hexColor))
演示

轉(zhuǎn)換結(jié)果result 目錄下就是轉(zhuǎn)換新圖片

python真的很不錯(cuò)^_^。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python中計(jì)算一個(gè)列表中連續(xù)相同的元素個(gè)數(shù)方法
今天小編就為大家分享一篇python中計(jì)算一個(gè)列表中連續(xù)相同的元素個(gè)數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python開(kāi)發(fā)之a(chǎn)naconda以及win7下安裝gensim的方法
這篇文章主要介紹了python開(kāi)發(fā)之a(chǎn)naconda以及win7下安裝gensim的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
APIStar:一個(gè)專(zhuān)為Python3設(shè)計(jì)的API框架
今天小編就為大家分享一篇關(guān)于一個(gè)專(zhuān)為Python3設(shè)計(jì)的API框架:APIStar,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-09-09
Python自動(dòng)化之?dāng)?shù)據(jù)驅(qū)動(dòng)讓你的腳本簡(jiǎn)潔10倍【推薦】
數(shù)據(jù)驅(qū)動(dòng)是一種思想,讓數(shù)據(jù)和代碼進(jìn)行分離。這篇文章主要介紹了Python自動(dòng)化之?dāng)?shù)據(jù)驅(qū)動(dòng),讓你的腳本簡(jiǎn)潔10倍,需要的朋友可以參考下2019-06-06
python實(shí)現(xiàn)Thrift服務(wù)端的方法
這篇文章主要介紹了python實(shí)現(xiàn)Thrift服務(wù)端的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04
解決pycharm臨時(shí)打包32位程序的問(wèn)題
這篇文章主要介紹了解決pycharm臨時(shí)打包32位程序的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

