Skip to content

Commit d7a86cf

Browse files
committed
破坏更新
1 parent f9ad81a commit d7a86cf

File tree

4 files changed

+115
-13
lines changed

4 files changed

+115
-13
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
request.py
2+
1.png

__init__.py

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,20 @@ async def img2img(bot, ev):
7070
await bot.finish(ev, f"已报错:{error_msg}", at_sender=True)
7171
await bot.send(ev, result_msg, at_sender=True)
7272

73+
74+
@sv.on_keyword("解析pic")
75+
async def get_pic_msg(bot, ev):
76+
if ev.message[0].type == "reply":
77+
tmsg = await bot.get_msg(message_id=int(ev.message[0].data['id']))
78+
ev.message = tmsg["message"]
79+
msg = await until.get_pic_msg_temp(ev.message)
80+
await bot.send(ev, msg, at_sender=True)
81+
82+
83+
84+
85+
86+
7387
@sv.on_suffix('XP排行')
7488
async def get_xp_list(bot, ev):
7589
msg = ev.message.extract_plain_text()
@@ -124,7 +138,7 @@ async def upload_header(bot, ev):
124138
await bot.send(ev, f"报错:{e}",at_sender=True)
125139

126140

127-
@sv.on_rex((r'^查看(.*)pic+( ([0-9]\d*))?'))
141+
@sv.on_rex((r'^查看(.+)pic+( ([0-9]\d*))?'))
128142
async def check_pic(bot, ev):
129143
gid = ev.group_id
130144
uid = ev.user_id
@@ -180,6 +194,25 @@ async def del_img(bot, ev):
180194
msg = db.del_pic(id)
181195
await bot.send(ev, msg, at_sender=True)
182196

197+
198+
199+
200+
201+
202+
203+
204+
205+
206+
207+
208+
209+
210+
211+
212+
213+
214+
215+
183216
@sv.on_prefix("元素法典")
184217
async def magic_book(bot, ev):
185218
msg = ev.message.extract_plain_text().strip()
@@ -193,7 +226,25 @@ async def magic_book(bot, ev):
193226
if len(error_msg):
194227
await bot.finish(ev, f"已报错:{error_msg}", at_sender=True)
195228
await bot.send(ev, result_msg, at_sender=True)
196-
await bot.send_group_forward_msg(group_id=ev['group_id'], messages=node_data)#发送tags,用转发消息
229+
#await bot.send_group_forward_msg(group_id=ev['group_id'], messages=node_data)#发送tags,用转发消息
230+
231+
232+
233+
234+
235+
236+
237+
238+
239+
240+
241+
242+
243+
244+
245+
246+
247+
197248

198249

199250

draw.py

Whitespace-only changes.

until.py

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import ahocorasick
1414
import asyncio
1515
import yaml
16+
import aiofiles
17+
import uuid
1618
try:
1719
import hjson as json
1820
except:
@@ -26,6 +28,10 @@
2628
if not exists(save_image_path):
2729
os.mkdir(save_image_path) #创建img保存目录
2830

31+
temp_image_path= join(curpath,'TempImage') # 保存临时图片路径
32+
if not exists(temp_image_path):
33+
os.mkdir(temp_image_path) #创建临时img保存目录
34+
2935

3036
with open(config_path,encoding="utf-8") as f: #初始化配置文件
3137
config = yaml.safe_load(f)#读取配置文件
@@ -56,7 +62,7 @@ async def process_tags(gid,uid,tags,add_db=config['add_db'],trans=config['trans'
5662
try:
5763
tags = f"tags={tags.strip().lower()}" #去除首尾空格换行#转小写#头部加上tags= #转小写方便处理
5864
taglist = re.split('&',tags) #分割
59-
id = ["tags=","ntags=","seed=","scale=","shape=","strength=","r18="]
65+
id = ["tags=","ntags=","seed=","scale=","shape=","strength=","r18=","steps=","sampler=","restore_faces=","tiling="]
6066
tag_dict = {i: ("" if not [idx for idx in taglist if idx.startswith(i)] else [idx for idx in taglist if idx.startswith(i)][-1]).replace(i, '', 1) for i in id }#取出tags+ntags+seed+scale+shape,每种只取列表最后一个,并删掉id
6167
except Exception as e:
6268
error_msg = error_msg.join(f"tags初始化失败{e}")
@@ -100,6 +106,8 @@ async def process_tags(gid,uid,tags,add_db=config['add_db'],trans=config['trans'
100106
tag_dict["tags="] = config['tags_moren']#默认正面tags
101107
if not tag_dict["ntags="]:
102108
tag_dict["ntags="] = config['ntags_moren']#默认负面tags
109+
if not config["ntags_safe"]:
110+
tag_dict["ntags="] = config["ntags_safe"].join(f",{tag_dict['ntags=']}")#默认安全负面tags
103111
if not tag_dict["scale="]:
104112
tag_dict["scale="] = config['scale_moren']#默认scale
105113
if tag_dict["shape="] and tag_dict["shape="].capitalize() in ["Portrait","Landscape","Square"]:
@@ -108,6 +116,14 @@ async def process_tags(gid,uid,tags,add_db=config['add_db'],trans=config['trans'
108116
tag_dict["shape="] = config['shape_moren']#默认形状
109117
if not tag_dict["r18="]:
110118
tag_dict["r18="] = config['r18_moren']#默认r18参数
119+
if not tag_dict["steps="]:
120+
tag_dict["steps="] = "30"#默认steps
121+
if not tag_dict["sampler="]:
122+
tag_dict["sampler="] = "Euler a"#默认sampler
123+
if not tag_dict["restore_faces="] and tag_dict["restore_faces="] != "True":
124+
tag_dict["restore_faces="] = False#默认restore_faces
125+
if not tag_dict["tiling="] and tag_dict["tiling="] != "True":
126+
tag_dict["tiling="] = False#默认tiling
111127
#上传XP数据库
112128
if add_db:
113129
try:
@@ -127,7 +143,28 @@ async def retry_get_ip_token(i):
127143
return api_ip,token
128144

129145
#pic本地保存
130-
#pic_id
146+
#pid
147+
async def pic_save_temp(imagedata):
148+
pid = str(uuid.uuid4())
149+
async with aiofiles.open(f"{temp_image_path}/{pid}.png", 'wb') as f:
150+
await f.write(imagedata)
151+
return pid
152+
153+
async def get_pic_msg_temp(msg):
154+
pid = re.search(r"pid:+([a-z0-9-]{36})",str(msg))[1]
155+
try:
156+
img = Image.open(f"{temp_image_path}/{pid}.png")
157+
except:
158+
return f"找不到这个图片涅~"
159+
parameters = re.search(r"(.+)\nNegative prompt: +(.+)\nSteps: +(.+), Sampler: +(.+), CFG scale: +(.+), Seed: +(.+), Size: +(.+), Model hash: +(.{8})",img.info["parameters"])
160+
msg = f'''
161+
▲prompt: {parameters[1]}
162+
▼Negative prompt: {parameters[2]}
163+
Steps:{parameters[3]} Sampler:{parameters[4]}
164+
CFG scale:{parameters[5]} seed:{parameters[6]}
165+
Size:{parameters[7]} Model hash:{parameters[8]}'''
166+
return msg
167+
131168

132169

133170
async def get_imgdata_sd(tagdict:dict,way=1,shape="Portrait",b_io=None,size = None):
@@ -138,28 +175,36 @@ async def get_imgdata_sd(tagdict:dict,way=1,shape="Portrait",b_io=None,size = No
138175
width,height = size
139176
if not tagdict["strength="]:
140177
tagdict["strength="] = config['strength_moren']#默认噪声
178+
if not tagdict["seed="]:
179+
tagdict["seed="] = -1
141180
json_data = {
142181
"init_images": data,
143182
"resize_mode": 0,
144183
"denoising_strength": tagdict["strength="],
145184
"prompt": tagdict["tags="],
146-
"seed": -1,
147-
"steps": 50,
185+
"seed": tagdict["seed="],
186+
"steps": tagdict["steps="],
148187
"cfg_scale": tagdict["scale="],
149188
"width": width,
150189
"height": height,
190+
"restore_faces": tagdict["restore_faces="],
191+
"tiling": tagdict["tiling="],
151192
"negative_prompt": tagdict["ntags="],
152-
"sampler_index": "Euler"
193+
"sampler_index": tagdict["sampler="]
153194
}
154195
response = await aiorequests.post(url,json=json_data,headers = {"Content-Type": "application/json"})
155196
imgdata = await response.json()
156197
imgdata = imgdata["images"][0]
198+
try :
199+
pid = await pic_save_temp(base64.b64decode(imgdata))
200+
except Exception as e:
201+
print(f"!!!保存失败{e}")
157202
try:
158203
imgmes = 'base64://' + imgdata
159204
except Exception as e:
160205
error_msg = error_msg.join("处理图像失败{e}")
161206
return result_msg,error_msg
162-
result_msg = f"[CQ:image,file={imgmes}]\ntags:{tagdict['tags=']}"
207+
result_msg = f"[CQ:image,file={imgmes}]\npid:{pid}"
163208
return result_msg,error_msg
164209

165210

@@ -186,7 +231,6 @@ async def get_imgdata(tagdict:dict,way=1,shape="Portrait",b_io=None):#way=1时
186231
response = await aiorequests.get(url, timeout=180)
187232
else:
188233
url = (f"http://{api_ip}/got_image2image") + (f"?tags={tags}")+(f"&token={token}")
189-
190234
response = await aiorequests.post(url,data=b64encode(b_io.getvalue()), timeout=180)
191235
imgdata = await response.content
192236
if len(imgdata) < 5000:
@@ -204,6 +248,10 @@ async def get_imgdata(tagdict:dict,way=1,shape="Portrait",b_io=None):#way=1时
204248
except Exception as e:
205249
error_msg = f"获取图片信息失败"
206250
return result_msg,error_msg
251+
try :
252+
pid = await pic_save_temp(imgdata)
253+
except Exception as e:
254+
print(f"!!!保存失败{e}")
207255
try:
208256
img = Image.open(BytesIO(imgdata))
209257
buffer = BytesIO() # 创建缓存
@@ -212,7 +260,7 @@ async def get_imgdata(tagdict:dict,way=1,shape="Portrait",b_io=None):#way=1时
212260
except Exception as e:
213261
error_msg = error_msg.join("处理图像失败{e}")
214262
return result_msg,error_msg
215-
result_msg = f"[CQ:image,file={imgmes}]{msg}\ntags:{tags}"
263+
result_msg = f"[CQ:image,file={imgmes}]{msg}\npid:{pid}"
216264
return result_msg,error_msg
217265

218266

@@ -267,7 +315,6 @@ async def get_pic_d(msg):
267315
img_data = await aiorequests.get(url)
268316
image = Image.open(BytesIO(await img_data.content))
269317
a,b = image.size
270-
print(f"原尺寸{a}x{b}!!!!!!!!!!!!!")
271318
c = a/b
272319
s = [0.6667,1.5,1]
273320
n = 1000000 #最大像素
@@ -276,7 +323,6 @@ async def get_pic_d(msg):
276323
a = math.ceil(c*b)
277324
a = math.ceil(a/64)*64
278325
b = math.ceil(b/64)*64 #等比缩放为64的倍数
279-
print(f"新尺寸{a}x{b}!!!!!!!!!!!!!")
280326
size = (a,b)
281327
s1 =["Portrait","Landscape","Square"]
282328
shape=s1[s.index(nsmallest(1, s, key=lambda x: abs(x-c))[0])]#判断形状
@@ -465,6 +511,10 @@ async def get_imgdata_magic(tags):#way=1时为get,way=0时为post
465511
continue
466512
i=999
467513
error_msg = ""
514+
try :
515+
pid = await pic_save_temp(imgdata)
516+
except Exception as e:
517+
print(f"!!!保存失败{e}")
468518
try:
469519
img = Image.open(BytesIO(imgdata)).convert("RGB")
470520
buffer = BytesIO() # 创建缓存
@@ -473,5 +523,5 @@ async def get_imgdata_magic(tags):#way=1时为get,way=0时为post
473523
except Exception as e:
474524
error_msg = error_msg.join("处理图像失败{e}")
475525
return result_msg,error_msg
476-
result_msg = f"[CQ:image,file={imgmes}]"
526+
result_msg = f"[CQ:image,file={imgmes}]\npid:{pid}"
477527
return result_msg,error_msg

0 commit comments

Comments
 (0)