上图
aiohttp,asyncio和aiofiles我真的是大爱 ,有了它,再也不用为配图烦恼了哈哈哈,
下面代码:
# *coding=utf-8
import asyncio
import os
from io import BytesIO
import PySimpleGUI as sg
import aiofiles
import aiohttp
import pygame
import requests
from PIL import Image
loop = asyncio.get_event_loop()
k = 0
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
'Access-Control-Allow-Credentials': 'true',
'Connection': 'keep-alive',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E5%B0%8F%E7%A7%98'
}
async def get_img(u, kk, name):
async with aiohttp.ClientSession()as session:
async with session.get(u, headers=header)as resp:
content = await resp.content.read()
async with aiofiles.open(f'{name}/' + '{}.jpg'.format(kk), 'wb')as fp:
await fp.write(content)
print('over' + str(kk))
url_list = [] # 存图片的url
async def small_main(nam):
global k
# 创建文件夹
file_name = os.makedirs(nam)
qa = []
for iii in url_list:
k += 1
qa.append(get_img(iii, k, nam))
await asyncio.wait(qa)
# 返回图片列表
def init(n, num=60):
global url_list
url = 'https://image.baidu.com/search/acjson'
obj = n
param = {
'tn': 'resultjson_com',
'logid': 7404155273977471214,
'ipn': 'rj',
'ct': 201326592,
'fp': 'result',
'queryWord': obj,
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'word': obj,
'nc': 1,
'pn': 0,
'rn': num, # 要申请展示的图片数量
'gsm': '1e'
}
r = requests.get(url, params=param, headers=header)
data = r.json()['data']
COUNT = 0
for i in data[0:num]:
COUNT = COUNT + 1
url_list.append(i['thumbURL'])
print(COUNT)
# 进行图片的存储
return url_list
def image_to_data(im):
with BytesIO() as output:
im.save(output, format="PNG")
data = output.getvalue()
return data
def make_background(window, file, main_frame):
global images
def find_frames(widget):
widgets = list(widget.children.values())
if isinstance(widget, (sg.tk.Frame, sg.tk.LabelFrame)):
widget.update()
x, y = widget.winfo_rootx() - x0, widget.winfo_rooty() - y0
width, height = widget.winfo_width(), widget.winfo_height()
new_im = im_.crop((x, y, x + width, y + height))
image = sg.tk.PhotoImage(data=image_to_data(new_im))
images.append(image)
label = sg.tk.Label(widget, image=image, padx=0, pady=0, bd=0, bg=bg)
label.place(x=0, y=0)
label.lower()
for widget in widgets:
find_frames(widget)
size = window.size
im_ = Image.open(file).resize(size)
root = window.TKroot
widgets = list(root.children.values())
x0, y0 = root.winfo_rootx(), root.winfo_rooty()
frame = sg.tk.Frame(root, padx=0, pady=0, bd=0, bg=bg)
frame.place(x=0, y=0)
images = []
image = sg.tk.PhotoImage(data=image_to_data(im_))
images.append(image)
label = sg.tk.Label(frame, image=image, padx=0, pady=0, bd=0, bg=bg)
label.pack()
main_frame.Widget.master.place(in_=frame, anchor='center', relx=.5, rely=.5)
frame.lower()
frame.update()
for widget in widgets:
find_frames(widget)
bg = sg.theme_background_color()
background_image_file = os.path.join(os.getcwd(), '50.jpg')
size = (500, 750)
sg.set_options(dpi_awareness=True)
frame = [
[sg.Text('欢迎使用图片采集', background_color='pink', font='Helvetica 18')],
[sg.Input(justification='center', size=10, key='name'),
sg.Text('← 图名,数量(默认为60,可不填) →', justification='center', background_color='black'),
sg.Input(justification='center', size=10, key='num')],
[sg.Button('OK', key='OK')],
[sg.Button('Exit', key='Exit')]
]
# Need only one frame here to move it to center of window
layout = [[sg.Frame('', frame, border_width=0, key='FRAME', background_color=bg)]]
location = sg.Window.get_screen_size()
window = sg.Window('Background Demo', layout, margins=(0, 0), grab_anywhere=True,
size=size, keep_on_top=True, finalize=True,
no_titlebar=True,
transparent_color=bg,
)
images = []
make_background(window, background_image_file, window['FRAME'])
while True:
event, values = window.read()
if event in (sg.WINDOW_CLOSED, 'Cancel', 'Exit'):
break
if event == 'OK':
# 获取用户输入的值
if str(window['num'].get()).isdigit():
init(window['name'].get(), int(window['num'].get()))
else:
init(window['name'].get())
loop.run_until_complete(small_main(window['name'].get()))
window['name'].update('采集完毕~')
window['num'].update('请查收~')
url_list = []
k = 0
print(event)
window.close()
图片替换为自己的图片即可,分辨率也可以根据图片大小来调节