From 60eba8427f49470e9af3bdf3ebe5b1916c244eb8 Mon Sep 17 00:00:00 2001 From: qwerdvd <2450899274@qq.com> Date: Sat, 13 May 2023 19:14:55 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A8=E6=9B=B4=E6=96=B0=E6=AD=A6?= =?UTF-8?q?=E5=99=A8=E7=BB=98=E5=88=B6=E6=96=B9=E5=BC=8F=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starrailuid_charinfo/draw_char_img.py | 61 ++++++++++-------- .../texture2D/weapon_bg.png | Bin 15766 -> 3542 bytes 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 1a594ff..2f2f10f 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -91,28 +91,28 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): char_img = Image.open(CHAR_PORTRAIT / f'{char.char_id}.png').resize( (1050, 1050) ) - char_info.paste(char_img, (-140, -100), char_img) + char_info.paste(char_img, (-220, -130), char_img) # 放属性图标 attr_img = Image.open(TEXT_PATH / f'IconAttribute{char.char_element}.png') - char_info.paste(attr_img, (580, 131), attr_img) + char_info.paste(attr_img, (540, 166), attr_img) # 放角色名 char_img_draw = ImageDraw.Draw(char_info) char_img_draw.text( - (705, 175), char.char_name, white_color, sr_font_38, 'mm' + (665, 210), char.char_name, white_color, sr_font_38, 'mm' ) # 放等级 char_img_draw.text( - (790, 183), f'LV.{str(char.char_level)}', white_color, sr_font_20, 'mm' + (750, 213), f'LV.{str(char.char_level)}', white_color, sr_font_20, 'mm' ) # 放星级 rarity_img = Image.open( TEXT_PATH / f'LightCore_Rarity{char.char_rarity}.png' ).resize((306, 72)) - char_info.paste(rarity_img, (540, 198), rarity_img) + char_info.paste(rarity_img, (490, 233), rarity_img) # 放命座 rank_img = Image.open(TEXT_PATH / 'ImgNewBg.png') @@ -120,12 +120,12 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): rank_img_draw.text( (70, 44), f'{NUM_MAP[char.char_rank]} 命', white_color, sr_font_28, 'mm' ) - char_info.paste(rank_img, (772, 190), rank_img) + char_info.paste(rank_img, (722, 225), rank_img) - # # 放uid - # char_img_draw.text( - # (750, 290), f'UID: {sr_uid}', white_color, sr_font_23, 'mm' - # ) + # 放uid + char_img_draw.text( + (995, 715), f'UID: {sr_uid}', white_color, sr_font_28, 'rm' + ) # 放属性列表 attr_bg = Image.open(TEXT_PATH / 'attr_bg.png') @@ -142,10 +142,10 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): hp = int(mp.floor(hp)) add_hp = int(mp.floor(add_hp)) attr_bg_draw.text( - (415, 31), f'{hp + add_hp}', white_color, sr_font_26, 'rm' + (413, 31), f'{hp + add_hp}', white_color, sr_font_26, 'rm' ) attr_bg_draw.text( - (430, 31), + (428, 31), f'(+{str(round(add_hp))})', (95, 251, 80), sr_font_26, @@ -163,14 +163,14 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): atk = int(mp.floor(attack)) add_attack = int(mp.floor(add_attack)) attr_bg_draw.text( - (415, 31 + 48), + (413, 31 + 48), f'{atk + add_attack}', white_color, sr_font_26, 'rm', ) attr_bg_draw.text( - (430, 31 + 48), + (428, 31 + 48), f'(+{str(round(add_attack))})', (95, 251, 80), sr_font_26, @@ -190,14 +190,14 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): defence = int(mp.floor(defence)) add_defence = int(mp.floor(add_defence)) attr_bg_draw.text( - (415, 31 + 48 * 2), + (413, 31 + 48 * 2), f'{defence + add_defence}', white_color, sr_font_26, 'rm', ) attr_bg_draw.text( - (430, 31 + 48 * 2), + (428, 31 + 48 * 2), f'(+{str(round(add_defence))})', (95, 251, 80), sr_font_26, @@ -211,14 +211,14 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): speed = int(mp.floor(speed)) add_speed = int(mp.floor(add_speed)) attr_bg_draw.text( - (415, 31 + 48 * 3), + (413, 31 + 48 * 3), f'{speed + add_speed}', white_color, sr_font_26, 'rm', ) attr_bg_draw.text( - (430, 31 + 48 * 3), + (428, 31 + 48 * 3), f'(+{str(round(add_speed))})', (95, 251, 80), sr_font_26, @@ -290,7 +290,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): sr_font_26, 'rm', ) - char_info.paste(attr_bg, (517, 265), attr_bg) + char_info.paste(attr_bg, (475, 300), attr_bg) # 命座 for rank in range(0, 6): @@ -359,31 +359,36 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): weapon_bg = Image.open(TEXT_PATH / 'weapon_bg.png') weapon_id = char.equipment['equipmentID'] weapon_img = Image.open(WEAPON_PATH / f'{weapon_id}.png').resize( - (240, 240) + (260, 240) ) weapon_bg.paste(weapon_img, (-10, 50), weapon_img) weapon_bg_draw = ImageDraw.Draw(weapon_bg) weapon_bg_draw.text( - (370, 47), + (310, 47), f'{char.equipment["equipmentName"]}', white_color, sr_font_34, - 'mm', + 'lm', ) - weapon_bg_draw.text( - (536, 47), - f'{NUM_MAP[char.equipment["equipmentRank"]]} 阶', + # 放阶 + rank_img = Image.open(TEXT_PATH / 'ImgNewBg.png') + rank_img_draw = ImageDraw.Draw(rank_img) + rank_img_draw.text( + (70, 44), + f'{NUM_MAP[char.char_rank]} 阶', white_color, sr_font_28, 'mm', ) + weapon_bg.paste(rank_img, (450, 2), rank_img) + rarity_img = Image.open( TEXT_PATH / f'LightCore_Rarity{char.equipment["equipmentRarity"]}.png' ).resize((306, 72)) - weapon_bg.paste(rarity_img, (160, 55), rarity_img) + weapon_bg.paste(rarity_img, (180, 55), rarity_img) weapon_bg_draw.text( - (430, 90), + (455, 90), f'Lv.{char.equipment["equipmentLevel"]}', white_color, sr_font_28, @@ -401,7 +406,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): for i in range(0, len(desc_params)): desc = desc.replace(f'#{i + 1}[i]', str(desc_params[i])) draw_text_by_line( - weapon_bg, (220, 115), desc, sr_font_24, '#F9F9F9', 372 + weapon_bg, (243, 115), desc, sr_font_24, '#F9F9F9', 372 ) char_info.paste(weapon_bg, (22, 870), weapon_bg) else: diff --git a/StarRailUID/starrailuid_charinfo/texture2D/weapon_bg.png b/StarRailUID/starrailuid_charinfo/texture2D/weapon_bg.png index 0efed85980da938a9cd71e39b964c28f54c20da0..85cf549fd1fafd78c9da194c65773e4779487547 100644 GIT binary patch delta 2894 zcmV-U3$gT;d)6BviBL{Q4GJ0x0000DNk~Le0007t0003t2nGNE0OpjlACVy+Xbpf# zL_t(|UhUm^&@JQ~2k=755-Qry0_~+?|bdhE>Ct(o}OHt9F&}q&(?PlV8kgDVFIOyTRX%1lWr_*5!kjj zpGoeQoSD3L;o>7cp0Rxsf0f)T`EzpDq(9#|KVP1FD3AL&*Cl=LOOux+nB8UBg!uN&px!3PqR@gBibfB!BIR`1Yg+ zRjx~McT|hKJYLo9lAdC2k+|}~l+BY9lc!8QTSY#r%h2ykx}Wh?$yt4#?{}*Uz=%;O z!sK{r^5Ud>5x<#SoucmR8HZV%v`69tr=G3QzZ=&lTc!A$@oz{zxBVB}I_JSjXA`eX z4$u3iXC?s{0SZN!04dPg^MCM=K1@2RxPFScuVtJ~XCA+j^nlCCS_Jk)^M%O+`oc^G zvy?sP(*BFjPkN)vLHW020ALg-6k#&FE@{8SeUe8dpGbyEG1t9}_fC4!xsO-Xn_Iq+ z>^${sh!l%G2=me8F3E?JE?4))7XU_pLJ`JXioQE$ctO%-=Kh~QW`D3WJew{V_Yg~$ zom(ufs{0qONVc16hA`iCRfaBA_Y`#ZFYaqr5nwbZ6k+^5D``ud9x%Cc3b%{<;v9BN zzLfMp%1k;_c%P&@HFwbeY4Pz_?T(9A~ zC^;bcN%Ec)Z5dV=ECX+nw0%vRaIcemB)K-})qcbDO1~ab>1`}qCzmFjh5SmsqgVOe zNWP~hp4)qIzvQOLeOLXr05HEO6k&{|ID1Zp?hSlgvQ7%K7JqVmy@gu$ANFMPW0Dqj zUryREd*h@(>$3A~Gll*8@yq0#us9@z&xc;gfW)ltos6c7^Q{WEs|}M?mz79D(5H1C!J~R3Fn?HeF8c z@BA?7tt~%FdVhUiXDK_Acxuuj^;=1c$c>U;r%?QLMgZn1g(8fx6p9Nn?2vTkuEDHawt#Cv+J@S__J6O%VGpwO@Jd_Zbmp?HcUquck>aqe za@Nh`HS^f1XMlN3p$KCv1=+qC-k5aeaJ>{}J@wqz`+vVPi9022vfaY4#aw6mHcYx? z-R9VH^-*jQ+Lkv>i^YCc`zUs)xrJd5sr)?On_=pEJGqspsCXvUUoy_xAOb4T{FL(dp7~(^fVgOnSg%uA5of(7T6c+MltfntP?+SCjTg z%&E66@WzrMR0E_^IB20!}nRjHedwYnvvswztW5 zbYJ51>FCZtz9L0v`!@nG0u+ic0S3#%ZDZ5JDIZ9>9KBZxx!#mA%+h3Wvg$s?UbT12 zP>>ga%I$1wyq1Zz8=mdZfp-_Ygk)p1rnY%x+%gHU+S_r-@1%KUo8E4X& zzvil>_cc%JY~quWq07$s%q=sthvT)$yOVR1JqHCV03$-72oofQ+Bq3oEVftTF-Z@% z?4H7|*Z18>-rJ!)4|@P*x=l`dulAb07J@w>b0hhj?tk1Z54#7lr>hT7E>3pL=lv!l z03$@92$Sc;q%(qTnbRJNJ%8-7K?=ORlitv>vNqmcxlK-IBm4eur||0?&QtPxO;1Vh zle7&^54vpSW z$*Yn}lk1a{Qv98i&$vws^;;>i#wI$AT z6^Q_&&5R;UxGo#V!sL}npRAko5KB)+ACk1Wc27)Sk^CTed`BO;^&g?b!-cq z&NzN1=`AgP-?s?B=u;>H|6ouwc9w8Kioa!f-eu)aCEb76!!6e(Jvsf${JhK50E{7p zA~2^EioK!bg~{?1hEJP%5rDDhFbl9cx?k}T$?Dwg48WLBC>8>%qlZ)4Q}KkUX8-^& sZQ0T#iv|w?vw=EV0vmw;mNnM+D^A+8>U>svRR91007*qoM6N<$g4J`*`Tzg` literal 15766 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 qZqWLF*Z)J{|E~!As=uy(h`Ls`t