简要说明:
wallpaper的壁纸下载后要想提取为图片,可以利用repkg工具,但是由此提取出的文件包含有我们不希望看到的,我们的目标为图片,于是本文的工作就是在repkg工具产生的output文件的基础上进行图片的提取,完善功能.在此附上repkg工具链接:Releases · notscuffed/repkg · GitHub
具体代码:
最基本的python代码,实现文件的操作,注意将repkg.exe文件与以下代码放在同一个文件夹里.
最后会生成俩个文件夹filtered-images和ideal-images,里面包含所有的图片,来进行最后人为的划分.
import os
import shutil
class Repkg:
def __init__(self):
"""
配置变量
"""
self.imageSuffix = ["bmp", "jpg", "png", "tif", "gif", "pcx", "tga", "exif",
"fpx", "svg", "psd", "cdr", "pcd", "dxf", "ufo", "eps",
"ai", "raw", "WMF", "webp", "avif", "apng", ] # 所有图片格式
self.output_filter_img = "filtered-images" # 输出文件夹-过滤图片
self.output_ideal_img = "ideal-images" # 输出文件夹-筛选图片
self.output = "output"
self.steamDirs = r"E:\Games\Steam\steamapps\workshop\content\431960" # steam保存壁纸的文件夹
self.filter_size_criteria = 500 # 筛选图片大小标准 500KB
def run_repkg(self):
"""
运行repkg命令,将wallpaper中的图片提取出来,保存到output文件夹
"""
try:
if not os.path.exists(self.output):
os.system(r"repkg extract -e tex -s -o ./{} {}".format(self.output, self.steamDirs))
except Exception:
print("请检查路径是否正确")
def follow_work(self):
"""
将repkg提取出来的各种文件进行筛选,整合到自定义的文件夹中
"""
if not os.path.exists(self.output_ideal_img):
os.makedirs(self.output_ideal_img)
if not os.path.exists(self.output_filter_img):
os.makedirs(self.output_filter_img)
self.clearDir(self.output_ideal_img, self.output_filter_img)
for fileName in os.listdir(self.output):
if fileName.split(".")[-1] in self.imageSuffix:
file = os.path.join(self.output, fileName)
size = os.path.getsize(file) / 1024
print("{} -> size:{:.3f}KB ".format(fileName, size))
if size > self.filter_size_criteria:
shutil.copy(file, self.output_ideal_img)
else:
shutil.copy(file, self.output_filter_img)
def clearDir(self, *dirs):
"""
清理文件,将一个文件夹清空
:param dirs: 需要清空的文件夹序列
"""
chdir = os.getcwd()
for dir in dirs:
os.chdir(os.path.join(chdir, dir))
for file in os.listdir("./"):
if os.path.isdir(file):
self.clearDir(file)
os.removedirs(file)
else:
os.remove(file)
os.chdir(chdir)
def process_item(self):
self.run_repkg()
print("\n{:*^150}\n".format("已完成pkg文件提取"))
self.follow_work()
print("\n{:*^150}\n".format("已完成图片提取, 开始清理不必包文件"))
self.clearDir(self.output)
os.removedirs(self.output)
print("代码工作完成,请查看:\n{}\n{}\n文件夹,进行微操".format(
os.path.join(os.getcwd(), self.output_ideal_img),
os.path.join(os.getcwd(), self.output_filter_img)))
if __name__ == '__main__':
Repkg().process_item()