格式化提交(事件响应部分)
1380
get_image.py
Normal file
@ -1,13 +1,20 @@
|
||||
import math,sqlite3,re,os,random,requests,json
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
import random
|
||||
import re
|
||||
import sqlite3
|
||||
from base64 import b64encode
|
||||
from io import BytesIO
|
||||
|
||||
from .getDB import ( GetAward, GetCharInfo, GetDaily, GetMysInfo, GetAudioInfo,
|
||||
GetSignInfo, GetSignList, GetWeaponInfo, MysSign,
|
||||
cookiesDB, GetMiscInfo)
|
||||
import requests
|
||||
|
||||
from .get_data import (get_award, get_char_info, get_daily_data, get_mihoyo_bbs_info, get_audio_info,
|
||||
get_sign_info, get_sign_list, get_weapon_info, mihoyo_bbs_sign,
|
||||
cookies_db, get_misc_info)
|
||||
|
||||
FILE_PATH = os.path.dirname(__file__)
|
||||
FILE2_PATH = os.path.join(FILE_PATH, 'mys')
|
||||
FILE2_PATH = os.path.join(FILE_PATH, 'mihoyo_bbs')
|
||||
INDEX_PATH = os.path.join(FILE2_PATH, 'index')
|
||||
Texture_PATH = os.path.join(FILE2_PATH, 'texture2d')
|
||||
|
||||
@ -52,7 +59,7 @@ avatar_json = {
|
||||
"Aloy": "埃洛伊",
|
||||
"Sara": "九条裟罗",
|
||||
"Kokomi": "珊瑚宫心海",
|
||||
"Shenhe":"申鹤"
|
||||
"Shenhe": "申鹤"
|
||||
}
|
||||
|
||||
daily_im = '''
|
||||
@ -143,13 +150,14 @@ audio_json = '''{
|
||||
"1020000":["1020000_01"]
|
||||
}'''
|
||||
|
||||
async def deal_ck(mes,qid):
|
||||
|
||||
async def deal_ck(mes, qid):
|
||||
aid = re.search(r"account_id=(\d*)", mes)
|
||||
mysid_data = aid.group(0).split('=')
|
||||
mysid = mysid_data[1]
|
||||
cookie = ';'.join(filter(lambda x: x.split('=')[0] in [
|
||||
"cookie_token", "account_id"], [i.strip() for i in mes.split(';')]))
|
||||
mys_data = await GetMysInfo(mysid, cookie)
|
||||
mys_data = await get_mihoyo_bbs_info(mysid, cookie)
|
||||
for i in mys_data['data']['list']:
|
||||
if i['game_id'] != 2:
|
||||
mys_data['data']['list'].remove(i)
|
||||
@ -159,17 +167,18 @@ async def deal_ck(mes,qid):
|
||||
c = conn.cursor()
|
||||
|
||||
try:
|
||||
c.execute("DELETE from CookiesCache where uid=? or mysid = ?",(uid,mysid))
|
||||
c.execute("DELETE from CookiesCache where uid=? or mysid = ?", (uid, mysid))
|
||||
except:
|
||||
pass
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
await cookiesDB(uid, cookie, qid)
|
||||
await cookies_db(uid, cookie, qid)
|
||||
|
||||
|
||||
async def award(uid):
|
||||
data = await GetAward(uid)
|
||||
data = await get_award(uid)
|
||||
nickname = data['data']['nickname']
|
||||
day_stone = data['data']['day_data']['current_primogems']
|
||||
day_mora = data['data']['day_data']['current_mora']
|
||||
@ -189,40 +198,43 @@ async def award(uid):
|
||||
month_stone, month_mora, lastmonth_stone, lastmonth_mora, group_str)
|
||||
return im
|
||||
|
||||
async def audio_wiki(name,message):
|
||||
async def get(audioid):
|
||||
tmp_json=json.loads(audio_json)
|
||||
for _ in range(3):#重试3次
|
||||
if audioid in tmp_json:
|
||||
if not tmp_json[audioid]:
|
||||
|
||||
async def audio_wiki(name, message):
|
||||
async def get(_audioid):
|
||||
tmp_json = json.loads(audio_json)
|
||||
for _ in range(3): # 重试3次
|
||||
if _audioid in tmp_json:
|
||||
if not tmp_json[_audioid]:
|
||||
return
|
||||
audioid1 = random.choice(tmp_json[audioid])
|
||||
audioid1 = random.choice(tmp_json[_audioid])
|
||||
else:
|
||||
audioid1=audioid
|
||||
url = await GetAudioInfo(name,audioid1)
|
||||
req=requests.get(url)
|
||||
audioid1 = _audioid
|
||||
url = await get_audio_info(name, audioid1)
|
||||
req = requests.get(url)
|
||||
if req.headers["Content-Type"].startswith("audio"):
|
||||
return BytesIO(req.content)
|
||||
else:
|
||||
if audioid in tmp_json:
|
||||
tmp_json[audioid].remove(audioid1)
|
||||
if _audioid in tmp_json:
|
||||
tmp_json[_audioid].remove(audioid1)
|
||||
|
||||
if name == "列表":
|
||||
im = f'[CQ:image,file=file://{os.path.join(INDEX_PATH,"语音.png")}]'
|
||||
im = f'[CQ:image,file=file://{os.path.join(INDEX_PATH, "语音.png")}]'
|
||||
return im
|
||||
elif name == "":
|
||||
return "角色名不正确。"
|
||||
else:
|
||||
audioid = re.findall(r"[0-9]+", message)[0]
|
||||
try:
|
||||
audio=await get(audioid)
|
||||
audio = await get(audioid)
|
||||
except:
|
||||
return "语音获取失败"
|
||||
if audio:
|
||||
audios = 'base64://' + b64encode(audio.getvalue()).decode()
|
||||
return (f"[CQ:record,file={audios}]")
|
||||
return f"[CQ:record,file={audios}]"
|
||||
|
||||
|
||||
async def artifacts_wiki(name):
|
||||
data = await GetMiscInfo("artifacts",name)
|
||||
data = await get_misc_info("artifacts", name)
|
||||
if "errcode" in data:
|
||||
im = "该圣遗物不存在。"
|
||||
else:
|
||||
@ -230,13 +242,17 @@ async def artifacts_wiki(name):
|
||||
for i in data["rarity"]:
|
||||
star = star + i + "星、"
|
||||
star = star[:-1]
|
||||
im = artifacts_im.format(data["name"],star,data["2pc"],data["4pc"],data["flower"]["name"],data["flower"]["description"],
|
||||
data["plume"]["name"],data["plume"]["description"],data["sands"]["name"],data["sands"]["description"],
|
||||
data["goblet"]["name"],data["goblet"]["description"],data["circlet"]["name"],data["circlet"]["description"])
|
||||
im = artifacts_im.format(data["name"], star, data["2pc"], data["4pc"], data["flower"]["name"],
|
||||
data["flower"]["description"],
|
||||
data["plume"]["name"], data["plume"]["description"], data["sands"]["name"],
|
||||
data["sands"]["description"],
|
||||
data["goblet"]["name"], data["goblet"]["description"], data["circlet"]["name"],
|
||||
data["circlet"]["description"])
|
||||
return im
|
||||
|
||||
|
||||
async def foods_wiki(name):
|
||||
data = await GetMiscInfo("foods",name)
|
||||
data = await get_misc_info("foods", name)
|
||||
if "errcode" in data:
|
||||
im = "该食物不存在。"
|
||||
else:
|
||||
@ -250,11 +266,13 @@ async def foods_wiki(name):
|
||||
for i in food_temp:
|
||||
ingredients += i + ":" + str(food_temp[i]) + "\n"
|
||||
ingredients = ingredients[:-1]
|
||||
im = food_im.format(data["name"],data["rarity"],data["foodtype"],data["foodfilter"],data["effect"],data["description"],ingredients)
|
||||
im = food_im.format(data["name"], data["rarity"], data["foodtype"], data["foodfilter"], data["effect"],
|
||||
data["description"], ingredients)
|
||||
return im
|
||||
|
||||
|
||||
async def enemies_wiki(name):
|
||||
raw_data = await GetMiscInfo("enemies",name)
|
||||
raw_data = await get_misc_info("enemies", name)
|
||||
if "errcode" in raw_data:
|
||||
im = "该原魔不存在。"
|
||||
else:
|
||||
@ -262,22 +280,23 @@ async def enemies_wiki(name):
|
||||
for i in raw_data["rewardpreview"]:
|
||||
reward += i["name"] + ":" + str(i["count"]) if "count" in i.keys() else i["name"] + ":" + "可能"
|
||||
reward += "\n"
|
||||
im = "【{}】\n——{}——\n类型:{}\n信息:{}\n掉落物:\n{}".format(raw_data["name"],raw_data["specialname"],
|
||||
raw_data["category"],raw_data["description"],reward)
|
||||
im = "【{}】\n——{}——\n类型:{}\n信息:{}\n掉落物:\n{}".format(raw_data["name"], raw_data["specialname"],
|
||||
raw_data["category"], raw_data["description"], reward)
|
||||
return im
|
||||
|
||||
|
||||
# 签到函数
|
||||
async def sign(uid):
|
||||
try:
|
||||
sign_data = await MysSign(uid)
|
||||
sign_info = await GetSignInfo(uid)
|
||||
sign_data = await mihoyo_bbs_sign(uid)
|
||||
sign_info = await get_sign_info(uid)
|
||||
sign_info = sign_info['data']
|
||||
sign_list = await GetSignList()
|
||||
sign_list = await get_sign_list()
|
||||
status = sign_data['message']
|
||||
getitem = sign_list['data']['awards'][int(
|
||||
sign_info['total_sign_day'])-1]['name']
|
||||
sign_info['total_sign_day']) - 1]['name']
|
||||
getnum = sign_list['data']['awards'][int(
|
||||
sign_info['total_sign_day'])-1]['cnt']
|
||||
sign_info['total_sign_day']) - 1]['cnt']
|
||||
get_im = f"本次签到获得{getitem}x{getnum}"
|
||||
if status == "OK" and sign_info['is_sign'] == True:
|
||||
mes_im = "签到成功"
|
||||
@ -289,9 +308,9 @@ async def sign(uid):
|
||||
im = "签到失败,请检查Cookies是否失效。"
|
||||
return im
|
||||
|
||||
|
||||
# 统计状态函数
|
||||
async def daily(mode="push", uid=None):
|
||||
|
||||
def seconds2hours(seconds: int) -> str:
|
||||
m, s = divmod(int(seconds), 60)
|
||||
h, m = divmod(m, 60)
|
||||
@ -308,7 +327,7 @@ async def daily(mode="push", uid=None):
|
||||
c_data = ([uid, 0, 0, 0, 0, 0, 0],)
|
||||
|
||||
for row in c_data:
|
||||
raw_data = await GetDaily(str(row[0]))
|
||||
raw_data = await get_daily_data(str(row[0]))
|
||||
if raw_data["retcode"] != 0:
|
||||
temp_list.append(
|
||||
{"qid": row[2], "gid": row[3], "message": "你的推送状态有误;可能是uid绑定错误或没有在米游社打开“实时便筏”功能。"})
|
||||
@ -339,11 +358,11 @@ async def daily(mode="push", uid=None):
|
||||
if current_resin >= row[6] or dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100:
|
||||
tip = ''
|
||||
|
||||
if current_resin >= row[6] and row[6] != 0:
|
||||
if current_resin >= row[6] != 0:
|
||||
tip += "\n==============\n你的树脂快满了!"
|
||||
if dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100:
|
||||
tip += "\n==============\n你的洞天宝钱快满了!"
|
||||
#if finished_expedition_num >0:
|
||||
# if finished_expedition_num >0:
|
||||
# tip += "\n==============\n你有探索派遣完成了!"
|
||||
max_resin = dailydata['max_resin']
|
||||
rec_time = ''
|
||||
@ -352,7 +371,8 @@ async def daily(mode="push", uid=None):
|
||||
resin_recovery_time = seconds2hours(
|
||||
dailydata['resin_recovery_time'])
|
||||
next_resin_rec_time = seconds2hours(
|
||||
8 * 60 - ((dailydata['max_resin'] - dailydata['current_resin']) * 8 * 60 - int(dailydata['resin_recovery_time'])))
|
||||
8 * 60 - ((dailydata['max_resin'] - dailydata['current_resin']) * 8 * 60 - int(
|
||||
dailydata['resin_recovery_time'])))
|
||||
rec_time = f' ({next_resin_rec_time}/{resin_recovery_time})'
|
||||
|
||||
finished_task_num = dailydata['finished_task_num']
|
||||
@ -364,35 +384,39 @@ async def daily(mode="push", uid=None):
|
||||
dailydata['remain_resin_discount_num']
|
||||
|
||||
coin = f'{dailydata["current_home_coin"]}/{dailydata["max_home_coin"]}'
|
||||
if dailydata["current_home_coin"]<dailydata["max_home_coin"]:
|
||||
coin_rec_time=seconds2hours(int(dailydata["home_coin_recovery_time"]))
|
||||
coin_add_speed=math.ceil((dailydata["max_home_coin"]-dailydata["current_home_coin"])/(int(dailydata["home_coin_recovery_time"])/60/60))
|
||||
coin+=f'({coin_rec_time} 约{coin_add_speed}/h)'
|
||||
if dailydata["current_home_coin"] < dailydata["max_home_coin"]:
|
||||
coin_rec_time = seconds2hours(int(dailydata["home_coin_recovery_time"]))
|
||||
coin_add_speed = math.ceil((dailydata["max_home_coin"] - dailydata["current_home_coin"]) / (
|
||||
int(dailydata["home_coin_recovery_time"]) / 60 / 60))
|
||||
coin += f'({coin_rec_time} 约{coin_add_speed}/h)'
|
||||
|
||||
expedition_data = "\n".join(expedition_info)
|
||||
send_mes = daily_im.format(tip, current_resin, max_resin, rec_time, finished_task_num, total_task_num, is_extra_got, used_resin_discount_num,
|
||||
resin_discount_num_limit, coin,current_expedition_num, finished_expedition_num, max_expedition_num, expedition_data)
|
||||
send_mes = daily_im.format(tip, current_resin, max_resin, rec_time, finished_task_num, total_task_num,
|
||||
is_extra_got, used_resin_discount_num,
|
||||
resin_discount_num_limit, coin, current_expedition_num,
|
||||
finished_expedition_num, max_expedition_num, expedition_data)
|
||||
|
||||
temp_list.append(
|
||||
{"qid": row[2], "gid": row[3], "message": send_mes})
|
||||
return temp_list
|
||||
|
||||
|
||||
async def weapon_wiki(name,level = None):
|
||||
data = await GetWeaponInfo(name)
|
||||
async def weapon_wiki(name, level=None):
|
||||
data = await get_weapon_info(name)
|
||||
if "errcode" in data:
|
||||
im = "武器不存在。"
|
||||
elif level:
|
||||
data2 = await GetWeaponInfo(name,level)
|
||||
data2 = await get_weapon_info(name, level)
|
||||
if data["substat"] != "":
|
||||
sp = data["substat"] + ":" + '%.1f%%' % (data2["specialized"] * 100) if data["substat"] != "元素精通" else data["substat"] + ":" + str(math.floor(data2["specialized"]))
|
||||
sp = data["substat"] + ":" + '%.1f%%' % (data2["specialized"] * 100) \
|
||||
if data["substat"] != "元素精通" else data["substat"] + ":" + str(math.floor(data2["specialized"]))
|
||||
else:
|
||||
sp = ""
|
||||
im = (data["name"] + "\n等级:" + str(data2["level"]) + "(突破" + str(data2["ascension"]) + ")" +
|
||||
"\n攻击力:" + str(round(data2["attack"])) + "\n" + sp)
|
||||
else:
|
||||
name = data['name']
|
||||
type = data['weapontype']
|
||||
_type = data['weapontype']
|
||||
star = data['rarity'] + "星"
|
||||
info = data['description']
|
||||
atk = str(data['baseatk'])
|
||||
@ -417,27 +441,29 @@ async def weapon_wiki(name,level = None):
|
||||
effect = "\n" + "【" + data['effectname'] + "】" + ":" + raw_effect
|
||||
else:
|
||||
effect = ""
|
||||
im = weapon_im.format(name, type, star, info, atk,
|
||||
im = weapon_im.format(name, _type, star, info, atk,
|
||||
sub, effect)
|
||||
return im
|
||||
|
||||
|
||||
async def char_wiki(name, mode="char", level=None):
|
||||
data = await GetCharInfo(name, mode, level if mode == "char" else None)
|
||||
data = await get_char_info(name, mode, level if mode == "char" else None)
|
||||
if mode == "char":
|
||||
if isinstance(data,list):
|
||||
if isinstance(data, list):
|
||||
im = ','.join(data)
|
||||
elif "errcode" in data:
|
||||
im = "不存在该角色或类型。"
|
||||
elif level:
|
||||
data2 = await GetCharInfo(name, mode)
|
||||
sp = data2["substat"] + ":" + '%.1f%%' % (data["specialized"] * 100) if data2["substat"] != "元素精通" else data2["substat"] + ":" + str(math.floor(data["specialized"]))
|
||||
data2 = await get_char_info(name, mode)
|
||||
sp = data2["substat"] + ":" + '%.1f%%' % (data["specialized"] * 100) if data2["substat"] != "元素精通" else \
|
||||
data2["substat"] + ":" + str(math.floor(data["specialized"]))
|
||||
im = (data2["name"] + "\n等级:" + str(data["level"]) + "\n血量:" + str(math.floor(data["hp"])) +
|
||||
"\n攻击力:" + str(math.floor(data["attack"])) + "\n防御力:" + str(math.floor(data["defense"])) +
|
||||
"\n" + sp)
|
||||
else:
|
||||
name = data['title'] + ' — ' + data['name']
|
||||
star = data['rarity']
|
||||
type = data["weapontype"]
|
||||
_type = data["weapontype"]
|
||||
element = data['element']
|
||||
up_val = data['substat']
|
||||
bdday = data['birthday']
|
||||
@ -445,9 +471,9 @@ async def char_wiki(name, mode="char", level=None):
|
||||
cv = data['cv']['chinese']
|
||||
info = data['description']
|
||||
im = char_info_im.format(
|
||||
name, star, type, element, up_val, bdday, polar, cv, info)
|
||||
name, star, _type, element, up_val, bdday, polar, cv, info)
|
||||
elif mode == "costs":
|
||||
if isinstance(data[1],list):
|
||||
if isinstance(data[1], list):
|
||||
im = ','.join(data[1])
|
||||
elif "errcode" in data[1]:
|
||||
im = "不存在该角色或类型。"
|
||||
@ -469,7 +495,7 @@ async def char_wiki(name, mode="char", level=None):
|
||||
|
||||
temp = {}
|
||||
cost = data[0]
|
||||
for i in range(1,7):
|
||||
for i in range(1, 7):
|
||||
for j in cost["ascend{}".format(i)]:
|
||||
if j["name"] not in temp:
|
||||
temp[j["name"]] = j["count"]
|
||||
@ -479,7 +505,7 @@ async def char_wiki(name, mode="char", level=None):
|
||||
for k in temp:
|
||||
im2 = im2 + k + ":" + str(temp[k]) + "\n"
|
||||
|
||||
im = im.format(im1,im2)
|
||||
im = im.format(im1, im2)
|
||||
elif mode == "constellations":
|
||||
if "errcode" in data:
|
||||
im = "不存在该角色或命座数量。"
|
||||
@ -490,8 +516,8 @@ async def char_wiki(name, mode="char", level=None):
|
||||
if "errcode" in data:
|
||||
im = "不存在该角色。"
|
||||
else:
|
||||
if int(level) <=6 and int(level) > 0:
|
||||
if int(level) <= 3 :
|
||||
if 6 >= int(level) > 0:
|
||||
if int(level) <= 3:
|
||||
if level == "1":
|
||||
data = data["combat1"]
|
||||
elif level == "2":
|
||||
@ -509,14 +535,14 @@ async def char_wiki(name, mode="char", level=None):
|
||||
data["attributes"]["parameters"][i] = temp[:-1]
|
||||
|
||||
for i in data["attributes"]["labels"]:
|
||||
#i = i.replace("{","{{")
|
||||
# i = i.replace("{","{{")
|
||||
i = re.sub(r':[a-zA-Z0-9]+}', "}", i)
|
||||
#i.replace(r':[a-zA-Z0-9]+}','}')
|
||||
# i.replace(r':[a-zA-Z0-9]+}','}')
|
||||
skill_detail += i + "\n"
|
||||
|
||||
skill_detail = skill_detail.format(**data["attributes"]["parameters"])
|
||||
|
||||
im = "【{}】\n{}\n————\n{}".format(skill_name,skill_info,skill_detail)
|
||||
im = "【{}】\n{}\n————\n{}".format(skill_name, skill_info, skill_detail)
|
||||
|
||||
else:
|
||||
if level == "4":
|
||||
@ -529,7 +555,7 @@ async def char_wiki(name, mode="char", level=None):
|
||||
data = data["passive4"]
|
||||
skill_name = data["name"]
|
||||
skill_info = data["info"]
|
||||
im = "【{}】\n{}".format(skill_name,skill_info)
|
||||
im = "【{}】\n{}".format(skill_name, skill_info)
|
||||
else:
|
||||
im = "不存在该天赋。"
|
||||
return im
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 793 KiB After Width: | Height: | Size: 793 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 614 KiB After Width: | Height: | Size: 614 KiB |
Before Width: | Height: | Size: 508 KiB After Width: | Height: | Size: 508 KiB |
Before Width: | Height: | Size: 689 KiB After Width: | Height: | Size: 689 KiB |
Before Width: | Height: | Size: 530 KiB After Width: | Height: | Size: 530 KiB |
Before Width: | Height: | Size: 637 KiB After Width: | Height: | Size: 637 KiB |
Before Width: | Height: | Size: 590 KiB After Width: | Height: | Size: 590 KiB |
Before Width: | Height: | Size: 602 KiB After Width: | Height: | Size: 602 KiB |
Before Width: | Height: | Size: 418 KiB After Width: | Height: | Size: 418 KiB |
Before Width: | Height: | Size: 611 KiB After Width: | Height: | Size: 611 KiB |
Before Width: | Height: | Size: 595 KiB After Width: | Height: | Size: 595 KiB |
Before Width: | Height: | Size: 507 KiB After Width: | Height: | Size: 507 KiB |
Before Width: | Height: | Size: 516 KiB After Width: | Height: | Size: 516 KiB |
Before Width: | Height: | Size: 540 KiB After Width: | Height: | Size: 540 KiB |
Before Width: | Height: | Size: 712 KiB After Width: | Height: | Size: 712 KiB |
Before Width: | Height: | Size: 795 KiB After Width: | Height: | Size: 795 KiB |
Before Width: | Height: | Size: 549 KiB After Width: | Height: | Size: 549 KiB |
Before Width: | Height: | Size: 423 KiB After Width: | Height: | Size: 423 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 489 KiB |
Before Width: | Height: | Size: 530 KiB After Width: | Height: | Size: 530 KiB |
Before Width: | Height: | Size: 581 KiB After Width: | Height: | Size: 581 KiB |
Before Width: | Height: | Size: 518 KiB After Width: | Height: | Size: 518 KiB |
Before Width: | Height: | Size: 561 KiB After Width: | Height: | Size: 561 KiB |
Before Width: | Height: | Size: 545 KiB After Width: | Height: | Size: 545 KiB |
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 461 KiB |
Before Width: | Height: | Size: 475 KiB After Width: | Height: | Size: 475 KiB |
Before Width: | Height: | Size: 589 KiB After Width: | Height: | Size: 589 KiB |
Before Width: | Height: | Size: 916 KiB After Width: | Height: | Size: 916 KiB |
Before Width: | Height: | Size: 788 KiB After Width: | Height: | Size: 788 KiB |
Before Width: | Height: | Size: 540 KiB After Width: | Height: | Size: 540 KiB |
Before Width: | Height: | Size: 465 KiB After Width: | Height: | Size: 465 KiB |
Before Width: | Height: | Size: 788 KiB After Width: | Height: | Size: 788 KiB |
Before Width: | Height: | Size: 454 KiB After Width: | Height: | Size: 454 KiB |
Before Width: | Height: | Size: 656 KiB After Width: | Height: | Size: 656 KiB |
Before Width: | Height: | Size: 651 KiB After Width: | Height: | Size: 651 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |