加藤罗莎qvod,outrageous,pps神仙道官网
什么是图种,就是一种包含压缩文件的图片。改后缀名可以正常解压,改为图片格式又可以正常预览。
简单的说就是把图片与压缩文件用二进制的方式合并起来。图片数据在前,压缩文件数据在后。
虽然batch脚本一条语句就可以生成,但是我们要讲究批量和自动化嘛,所以用python来实现。
import
文件夹,将要处理的图片和压缩包放进去。default.*
合并,没有放入默认图片则自动生成黑色图片与之合并。*.jpg
,*.png
,*.bmp
*.rar
,*.zip
,*.7z
# -*- coding: utf-8 -*- # python 3.7.2 import os import io from timeit import timeit # from pil import image from concurrent.futures import threadpoolexecutor # --- all_task= [] import_folder= 'import/' export_folder= 'export/' # --- def settasklist(): global all_task all_task= [] if not os.path.exists(export_folder): os.makedirs(export_folder) files= os.listdir(import_folder) default_img= ['default'+i for i in ('.jpeg','.jpg','.png','.bmp')] imgm= none ext= '.jpeg' # 判断是否存在默认图,没有则自动创建 for img in default_img: if img in files: imgm= image.open(import_folder+img) ext= os.path.splitext(img)[1] ext= '.jpeg' if ext=='.jpg' else ext files.remove(img) break if not imgm: imgm= image.new('l', (32,32), (60,)) # 第一行写入图片扩展名 imgm_bytes= io.bytesio() imgm_bytes.write(ext.encode()+ b'\n') imgm.save(imgm_bytes, ext[1:]) # 判断是否有对应的'同名字'图片,没有则与默认图合成 for f in files: split= os.path.splitext(f) if split[1].lower() in ('.rar','.zip','.7z'): imgs= [split[0]+i for i in ('.jpeg','.jpg','.png','.bmp')] cover_image= none for img in imgs: if img in files: cover_image= img break all_task.append((f,cover_image or imgm_bytes))
def assigntask(): pool = threadpoolexecutor() results = list(pool.map(createimgseed, all_task)) pool.shutdown() print ('{}个图种制作完毕!'.format(len(all_task)))
def createimgseed(task): pack, img= task with open(import_folder+pack,'rb') as p: if type(img)==str: with open(import_folder+img, 'rb') as i: ext= os.path.splitext(img)[1] img_data= i.read() else: datas= img.getvalue() i= datas.index(b'\n') ext= datas[:i].decode() img_data= datas[i+1:] # 最终输出文件以压缩包名字命名,保持对应图片扩展名 out_file= open(export_folder + os.path.splitext(pack)[0] + ext, 'wb') out_file.write(img_data) out_file.write(p.read()) out_file.close()
# -*- coding: utf-8 -*- # python 3.7.2 import os import io from timeit import timeit # from pil import image from concurrent.futures import threadpoolexecutor # --- all_task= [] import_folder= 'import/' export_folder= 'export/' # --- def settasklist(): global all_task all_task= [] if not os.path.exists(export_folder): os.makedirs(export_folder) files= os.listdir(import_folder) default_img= ['default'+i for i in ('.jpeg','.jpg','.png','.bmp')] imgm= none ext= '.jpeg' # 判断是否存在默认图,没有则自动创建 for img in default_img: if img in files: imgm= image.open(import_folder+img) ext= os.path.splitext(img)[1] ext= '.jpeg' if ext=='.jpg' else ext files.remove(img) break if not imgm: imgm= image.new('l', (32,32), (60,)) # 第一行写入图片扩展名 imgm_bytes= io.bytesio() imgm_bytes.write(ext.encode()+ b'\n') imgm.save(imgm_bytes, ext[1:]) # 判断是否有对应的'同名字'图片,没有则与默认图合成 for f in files: split= os.path.splitext(f) if split[1].lower() in ('.rar','.zip','.7z'): imgs= [split[0]+i for i in ('.jpeg','.jpg','.png','.bmp')] cover_image= none for img in imgs: if img in files: cover_image= img break all_task.append((f,cover_image or imgm_bytes)) def createimgseed(task): pack, img= task with open(import_folder+pack,'rb') as p: if type(img)==str: with open(import_folder+img, 'rb') as i: ext= os.path.splitext(img)[1] img_data= i.read() else: datas= img.getvalue() i= datas.index(b'\n') ext= datas[:i].decode() img_data= datas[i+1:] # 最终输出文件以压缩包名字命名,保持对应图片扩展名 out_file= open(export_folder + os.path.splitext(pack)[0] + ext, 'wb') out_file.write(img_data) out_file.write(p.read()) out_file.close() def assigntask(): pool = threadpoolexecutor() results = list(pool.map(createimgseed, all_task)) pool.shutdown() print ('{}个图种制作完毕!'.format(len(all_task))) def start(): settasklist() sec = timeit(lambda:assigntask(),number=1) print ('time used: {0:.3f} sec\n'.format(sec)) s= input('按回车键退出...\n') if __name__ == '__main__': while true: s= input('开始制作图种(y/n): ') if s.lower()== 'y': start() break elif not s or s.lower()== 'n': break
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论