目前Android工程 APK包體積逐漸增大,從壓縮圖片來講是一個解決方案,可是目前網上都沒有什麼好用的傻瓜式的批量壓縮方案,無心中發現Pngquant能夠去作這一件事,可是也只能單個文件夾壓縮,沒法遍歷整個工程文件進行圖片壓縮處理。python
在這個背景下,我以爲開發一個Python腳本結合Pngquant去作這件事情仍是有必要的git
github.com/RmondJone/P…github
下載源碼以後,進行下面的步奏便可:數組
config.inimarkdown
[config]
#須要壓縮的文件夾名稱,多個以空格分隔
compressDir = drawable-hdpi drawable-xhdpi drawable-xxhdpi drawable-xxxhdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi
複製代碼
main.pyapp
import os
import threading
from config import global_config
# 壓縮線程(同步壓縮)
class CompressThread(threading.Thread):
# 構造方法
def __init__(self, compressDir) -> None:
threading.Thread.__init__(self)
self.compressDir = compressDir
# 運行方法
def run(self) -> None:
print("線程開始運行,壓縮路徑爲:" + self.compressDir)
# 得到鎖
threadLock.acquire()
cmd = "pngquant 256 --quality=65-80 --skip-if-larger --force --ext .png " + self.compressDir + "\\*.png"
os.system(cmd)
# 釋放鎖
threadLock.release()
print("線程結束運行,壓縮路徑爲:" + self.compressDir)
if __name__ == '__main__':
configDirStr = global_config.getRaw("config", "compressDir")
configDir = configDirStr.split(" ")
print("當前配置須要壓縮的文件夾爲:")
print(configDir)
a = """
_____ _ _____ _
| __ (_) | __ \ | |
| |__) | ___ ______| |__) | __ __ _ __ _ _ _ __ _ _ __ | |_
| ___/ |/ __|______| ___/ '_ \ / _` |/ _` | | | |/ _` | '_ \| __|
| | | | (__ | | | | | | (_| | (_| | |_| | (_| | | | | |_
|_| |_|\___| |_| |_| |_|\__, |\__, |\__,_|\__,_|_| |_|\__|
__/ | | |
|___/ |_|
請選擇須要壓縮的文件夾路徑:
"""
print(a)
dirPath = input("請輸入:")
# 初始化線程鎖
threadLock = threading.Lock()
# 壓縮線程數組
threads = []
# 開始歷遍全部子文件夾
for root, dirs, files in os.walk(dirPath):
for dir in dirs:
if dir in configDir:
# 過濾編譯文件夾
if "build\generated" not in os.path.join(root, dir):
thread = CompressThread(os.path.join(root, dir))
threads.append(thread)
thread.start()
# 開始遍歷執行壓縮線程
for thread in threads:
thread.join()
複製代碼
核心代碼,主要就是使用python去遍歷配置文件中定義的要壓縮的文件夾,而後建立同步線程執行Pngquant壓縮處理。oop