diff --git a/enkanetworkcard/src/utils/CreatBannerFour.py b/enkanetworkcard/src/utils/CreatBannerFour.py index 7f3b450..506de1d 100644 --- a/enkanetworkcard/src/utils/CreatBannerFour.py +++ b/enkanetworkcard/src/utils/CreatBannerFour.py @@ -5,47 +5,99 @@ from .FunctionsPill import imgD,imagSize,centrText from .options import * from . import openFile +import operator as op +positionStatsIcon = [ + (129,14), + (125,44), + (123,73), + (121,103), + (119,133), + (116,163), + (112,193), + (109,223), + (106,253) +] + +positionStatsText = [ + (168,16), + (164,45), + (162,75), + (160,105), + (158,135), + (155,165), + (151,195), + (148,225), + (145,255) +] -class Mini: +positionArtifactIcon = [ + (406,2), + (406,28), + (517,2), + (517,28), +] - positionTalantsFrame= [ +positionArtifactText = [ + (429,4), + (429,28), + (540,4), + (540,28), +] + +positionArtifact = [ + (21,110),(14,167),(10,227),(3,287),(0,346) + ] +positionResultat = [ + (13,139),(699,139),(1378,139),(2059,139) +] + +positionTalantsFrame= [ (290,270), (283,331), (276,398) ] - positionTalantsIcon= [ - (304,272), - (297,333), - (290,400) - ] +positionTalantsIcon= [ + (304,272), + (297,333), + (290,400) +] - positionTalantsText= [ - (316,312), - (309,373), - (302,440) - ] +positionTalantsText= [ + (316,311), + (309,372), + (302,439) +] - positionConstFrame = [ - (45,104), - (41,166), - (36,225), - (29,283), - (24,342), - (16,400) - ] +positionConstFrame = [ + (45,104), + (41,166), + (36,225), + (29,283), + (24,342), + (16,400) +] - positionConstIcon = [ - (59,119), - (56,181), - (50,240), - (44,298), - (38,357), - (31,416) +positionConstIcon = [ + (59,119), + (56,181), + (50,240), + (44,298), + (38,357), + (30,416) +] + +positionC = [ + (108,241),(495,241),(882,241),(1269,241), ] +positionW = [ +(166,139),(555,139),(944,139),(1333,139), +] + +class Mini: def open_bg_element(self,element): if element == "Fire": @@ -93,29 +145,32 @@ def starCharter(self,x): return imgs.copy() - async def weapon(self,info, nameCharter,element): + async def weapon(self,info, nameCharter,element,lvl): bg = openFile.WEAPON_BG.copy() bgTwo = bg.copy() - linkImgCard = f"https://enka.network/ui/UI_NameCardPic_{nameCharter}_P.png" - bannerUserNamecard = await imagSize(link = linkImgCard,size = (339,161)) + nameCharter = nameCharter.split("Costume")[0] + if nameCharter in ["PlayerGirl","PlayerBoy"]: + linkImgCard = "https://api.ambr.top/assets/UI/namecard/UI_NameCardPic_0_P.png" + else: + linkImgCard = f"https://enka.network/ui/UI_NameCardPic_{nameCharter}_P.png" + try: + bannerUserNamecard = await imagSize(link = linkImgCard,size = (339,161)) + except: + linkImgCard = f"https://enka.network/ui/UI_NameCardPic_{nameCharter}1_P.png" + bannerUserNamecard = await imagSize(link = linkImgCard,size = (339,161)) bg.alpha_composite(bannerUserNamecard,(0,-27)) - #bg.paste(bannerUserNamecard,(0,-27),bannerUserNamecard) bg.alpha_composite(openFile.WEAPON_GRANDIENT,(0,0)) - #bg.paste(openFile.WEAPON_GRANDIENT,(0,0),openFile.WEAPON_GRANDIENT) bg = Image.composite(bgTwo, bg,openFile.MASKA_WEAPON.convert("L")) frame = self.open_frame_weapon_element(element) bg.alpha_composite(frame,(0,0)) - #bg.paste(frame,(0,0),frame) bg.alpha_composite(openFile.WEAPON_FRAME,(0,0)) - #bg.paste(openFile.WEAPON_FRAME,(0,0),openFile.WEAPON_FRAME) image = await imagSize(link = info.detail.icon.url,size = (76,80)) bg.alpha_composite(image,(18,4)) - #bg.paste(image,(18,4),image) name = info.detail.name - lvl = f"Уровень: {info.level}/90" + lvl = f"{lvl}: {info.level}/90" lvlUp = f"R{info.refinement}" baseAtt = info.detail.mainstats.value imageStats = None @@ -124,8 +179,8 @@ async def weapon(self,info, nameCharter,element): d = ImageDraw.Draw(bg) centrName,fonts = await centrText(name, witshRam = 236, razmer = 15, start = 97) - d.text((centrName,11), str(name), font= fonts, fill=coloring) - d.text((centrName,11), str(name), font= fonts, fill=coloring) + d.text((centrName,10), str(name), font= fonts, fill=coloring) + d.text((centrName,10), str(name), font= fonts, fill=coloring) d.text((137,39), str(baseAtt), font= fontSize(14), fill=coloring) for substate in info.detail.substats: @@ -136,7 +191,7 @@ async def weapon(self,info, nameCharter,element): if str(substate.type) == "DigitType.PERCENT": proc = True if imageStats: - bg.paste(imageStats,(218,37),imageStats) + bg.alpha_composite(imageStats,(218,37)) if proc: d.text((240,39), f"{dopStat}%", font= fontSize(14), fill=coloring) @@ -149,7 +204,6 @@ async def weapon(self,info, nameCharter,element): stars = star(info.detail.rarity) bg.alpha_composite(stars,(9,67)) - #bg.paste(stars,(9,67),stars) return bg @@ -161,26 +215,20 @@ async def talants(self,bg,characters): talantsBg = talantsBg.resize((62,61)) for key in characters.skills: if key.level > 9: - bg.alpha_composite(talantsBgGold,self.positionTalantsFrame[i]) - bg.alpha_composite(talantsBgGold,self.positionTalantsFrame[i]) + bg.alpha_composite(talantsBgGold,positionTalantsFrame[i]) else: - bg.alpha_composite(talantsBg,self.positionTalantsFrame[i]) - bg.alpha_composite(talantsBg,self.positionTalantsFrame[i]) + bg.alpha_composite(talantsBg,positionTalantsFrame[i]) imagesIconTalants = await imgD(link = key.icon.url) imagesIconTalants = imagesIconTalants.resize((34,34)) - bg.alpha_composite(imagesIconTalants, self.positionTalantsIcon[i]) - bg.alpha_composite(imagesIconTalants, self.positionTalantsIcon[i]) - - #bg.paste(imagesIconTalants, self.positionTalantsIcon[i],imagesIconTalants) - #bg.paste(imagesIconTalants, self.positionTalantsIcon[i],imagesIconTalants) + bg.alpha_composite(imagesIconTalants, positionTalantsIcon[i]) d = ImageDraw.Draw(bg) if len(str(key.level)) == 2: - d.text(self.positionTalantsText[i], str(key.level), font = fontSize(14), fill=coloring) + d.text((positionTalantsText[i][0]-1,positionTalantsText[i][1]), str(key.level), font = fontSize(14), fill=(250,188,87,255)) else: - d.text(self.positionTalantsText[i], str(key.level), font = fontSize(14), fill=coloring) + d.text(positionTalantsText[i], str(key.level), font = fontSize(14), fill=coloring) i += 1 return bg @@ -197,101 +245,48 @@ async def addConstant(self,bg,characters,element): imageIcon = imageIcon.resize((32,32)) if not key.unlocked: - bg.alpha_composite(closedConstBg, self.positionConstFrame[i]) - bg.alpha_composite(imageIcon, self.positionConstIcon[i]) - bg.alpha_composite(closeImg, self.positionConstIcon[i]) - - #bg.paste(closedConstBg, self.positionConstFrame[i],closedConstBg) - #bg.paste(imageIcon, self.positionConstIcon[i],imageIcon) - #bg.paste(closeImg, self.positionConstIcon[i],closeImg) + bg.alpha_composite(closedConstBg, positionConstFrame[i]) + bg.alpha_composite(imageIcon, positionConstIcon[i]) + bg.alpha_composite(closeImg, positionConstIcon[i]) else: - bg.alpha_composite(openConstBg, self.positionConstFrame[i]) - bg.alpha_composite(imageIcon, self.positionConstIcon[i]) - #bg.paste(openConstBg, self.positionConstFrame[i],openConstBg) - #bg.paste(imageIcon, self.positionConstIcon[i],imageIcon) + bg.alpha_composite(openConstBg, positionConstFrame[i]) + bg.alpha_composite(imageIcon, positionConstIcon[i]) i += 1 return await self.talants(bg,characters) - async def creat_bg(self,rarity,element,link,characters,lvl): + async def creat_bg(self,rarity,element,link,characters,lvl, chartImg): bg,frame = self.open_bg_element(element) bgTwo = bg.copy() - image = await imagSize(link,size = (2048,1024)) - bg.paste(image,(-830,-132),image) + if chartImg != None: + image,posX = centryImage(chartImg, teample = 4) + bg.alpha_composite(image,(posX,0)) + else: + image = await imagSize(link,size = (2048,1024)) + bg.alpha_composite(image,(-830,-132)) bg.alpha_composite(openFile.GRANDIENT_BG,(0,0)) - #bg.paste(openFile.GRANDIENT_BG,(0,0),openFile.GRANDIENT_BG) bg.alpha_composite(frame,(0,0)) - #bg.paste(frame,(0,0),frame) bg = Image.composite(bgTwo, bg,openFile.MASKA_BG.convert("L")) imgStar = self.starCharter(rarity) bg.alpha_composite(imgStar,(150,7)) - #bg.paste(imgStar,(150,7),imgStar) - bg.alpha_composite(openFile.FRENDS,(155,537)) - #bg.paste(openFile.FRENDS,(155,537),openFile.FRENDS) iconElement = elementIconPanel(element) bg.alpha_composite(iconElement,(24,573)) - #bg.paste(iconElement,(24,573),iconElement) #================================================== d = ImageDraw.Draw(bg) centrName,fonts = await centrText(characters.name, witshRam = 326, razmer = 30,start = 14) - d.text((centrName,474), str(characters.name), font= fonts, fill=coloring) - lvlText = f"{lvl}: {characters.level}/90" - centrName,fonts = await centrText(lvlText, witshRam = 151, razmer = 16,start = 101) - d.text((centrName,515), lvlText, font= fonts, fill=coloring) - d.text((181,541), str(characters.friendship_level), font = fontSize(20), fill=coloring) - - - #bg.show() + d.text((centrName,500), str(characters.name), font= fonts, fill=coloring) + lvlText = f"{lvl}: {characters.level}/90 |" + centrName,fonts = await centrText(lvlText, witshRam = 151, razmer = 17,start = 75) + d.text((centrName,543), lvlText, font= fonts, fill=coloring) + positionIconFriends = centrName + fonts.getsize(lvlText)[0] + 7 + + d.text((positionIconFriends+27,540), str(characters.friendship_level), font = fontSize(20), fill=coloring) + bg.alpha_composite(openFile.FRENDS,(positionIconFriends,536)) bg = await self.addConstant(bg,characters,element) return bg - -positionStatsIcon = [ - (135,23), - (130,54), - (128,85), - (124,116), - (120,147), - (117,178), - (114,209), - (111,240) -] - - -positionStatsText = [ - (174,25), - (169,56), - (167,87), - (163,118), - (159,149), - (156,180), - (153,211), - (150,242) -] - -positionArtifactIcon = [ - (406,2), - (406,28), - (517,2), - (517,28), -] - -positionArtifactText = [ - (429,1), - (429,25), - (540,1), - (540,25), -] - -positionArtifact = [ - (21,110),(14,167),(10,227),(3,287),(0,346) - ] -positionResultat = [ - (13,139),(699,139),(1378,139),(2059,139) -] - def open_frame_element(element, artifact = False): if artifact: if element == "Fire": @@ -326,34 +321,40 @@ def open_frame_element(element, artifact = False): elif element == "Ice": return openFile.CRYO_STAT.copy() else: - return openFile.PYRO_STAT.copy() + return openFile.PYRO_STAT.copy() async def stats(g,AttributeBg): - maxStat = 0 - elementUp = None + elementUp = True d = ImageDraw.Draw(AttributeBg) i = 0 - for key in reversed(list(g)): - - if key[1].value == 0: + + for key in g: + if key[1].id in [2000,2001,2002]: + iconImg = getIconAdd(key[0]) + icon = await imagSize(image = iconImg,fixed_width = 22) + AttributeBg.alpha_composite(icon,positionStatsIcon[i]) + if not key[1].id in stat_perc: + value = str(math.ceil(key[1].value)) + else: + value = f"{round(key[1].value * 100, 1)}%" + d.text(positionStatsText[i], value, font = fontSize(20), fill=coloring) + i += 1 + + for key in g: + if key[1].id in [40,41,42,43,44,45,46]: + if elementUp: + key = max((x for x in g if 40 <= x[1].id <= 46), key=lambda x: x[1].value) + elementUp = False + else: + continue + if key[1].value == 0 or key[1].id in [2000,2001,2002]: continue iconImg = getIconAdd(key[0]) if not iconImg: continue - if key[1].id in [40,41,42,43,44,45,46]: - if key[1].value > maxStat: - elementUp = key - maxStat = key[1].value - if key[1].id == 40: - key = elementUp - else: - continue - - - icon = await imagSize(image = iconImg,fixed_width = 26) - - AttributeBg.paste(icon, positionStatsIcon[i],icon) + icon = await imagSize(image = iconImg,fixed_width = 22) + AttributeBg.alpha_composite(icon, positionStatsIcon[i]) if not key[1].id in stat_perc: value = str(math.ceil(key[1].value)) else: @@ -377,12 +378,13 @@ async def creatArtifact(infpart,ArtifactBg,imageStats): else: val = infpart.detail.mainstats.value centrName,fonts = await centrText(val, witshRam = 34, razmer = 10, start = 39) - d.text((centrName,11), str(val), font= fonts, fill=coloring) - ArtifactBg.paste(imageStats,(6,3),imageStats) + d.text((centrName,11), str(val), font= fonts, fill=(0,0,0,0)) + d.text((centrName,10), str(val), font= fonts, fill=coloring) + ArtifactBg.alpha_composite(imageStats,(6,3)) d.text((47,26), str(infpart.level), font= fontSize(12), fill=coloring) starsImg = star(infpart.detail.rarity).resize((45,13)) - ArtifactBg.paste(starsImg,(7,37),starsImg) + ArtifactBg.alpha_composite(starsImg,(7,37)) i = 0 for key in infpart.detail.substats: @@ -393,9 +395,9 @@ async def creatArtifact(infpart,ArtifactBg,imageStats): if not imageStats: continue imageStats= await imagSize(image = imageStats,fixed_width = 17) - ArtifactBg.paste(imageStats,positionArtifactIcon[i],imageStats) + ArtifactBg.alpha_composite(imageStats,positionArtifactIcon[i]) - d.text(positionArtifactText[i], v, font= fontSize(15), fill=coloring) + d.text(positionArtifactText[i], v, font= fontSize(16), fill=coloring) i += 1 return ArtifactBg @@ -414,47 +416,52 @@ async def artifactAdd(characters,element): async def generationFour(items,assets,lang, mini = True, userName = "User", uid = "UID: Hide"): if mini: - BGT = openFile.ALL_BG.copy() - positionC = [ - (108,241),(495,241),(882,241),(1269,241), - ] - positionW = [ - (166,139),(555,139),(944,139),(1333,139), - ] + BGT = openFile.ALL_BG.copy().convert("RGBA") + if len(items) == 3: + BGT = BGT.crop((0,0,1416,997)) + elif len(items) == 2: + BGT = BGT.crop((0,0,1051,997)) + elif len(items) == 1: + BGT = BGT.crop((0,0,623,997)) ran = 0 for characters in items: + charactersImg = characters[1] + characters = characters[0] task = [] person = assets.character(characters.id) - task.append(Mini().creat_bg(person.rarity,person.element.value,person.images.banner.url,characters,lang["lvl"])) - #charter = await Mini().creat_bg(person.rarity,person.element.value,person.images.banner.url,characters,lang["lvl"]) - task.append(Mini().weapon(characters.equipments[-1],characters.image.icon.filename.replace("CostumeFloral","").split("AvatarIcon_")[1],person.element.value)) - #weaponR = await Mini().weapon(characters.equipments[-1],characters.image.icon.filename.replace("CostumeFloral","").split("AvatarIcon_")[1],person.element.value) + task.append(Mini().creat_bg(person.rarity,characters.element.value,person.images.banner.url,characters,lang["lvl"],charactersImg)) + task.append(Mini().weapon(characters.equipments[-1],characters.image.icon.filename.replace("CostumeFloral","").split("AvatarIcon_")[1],characters.element.value,lang["lvl"])) ec = await asyncio.gather(*task) - BGT.paste(ec[0],(positionC[ran][0],positionC[ran][1]),ec[0]) - BGT.paste(ec[1],(positionW[ran][0],positionW[ran][1]),ec[1]) + BGT.alpha_composite(ec[0],(positionC[ran][0],positionC[ran][1])) + BGT.alpha_composite(ec[1],(positionW[ran][0],positionW[ran][1])) ran += 1 d = ImageDraw.Draw(BGT) d.text((77,901), str(userName), font= fontSize(26), fill=coloring) d.text((77,935), str(uid), font= fontSize(26), fill=coloring) else: - BGT = openFile.BG_MAX_ALL.copy() + BGT = openFile.BG_MAX_ALL.copy().convert("RGBA") + if len(items) == 3: + BGT = BGT.crop((0,0,2047,997)) + elif len(items) == 2: + BGT = BGT.crop((0,0,1355,997)) + elif len(items) == 1: + BGT = BGT.crop((0,0,678,997)) + result = [] for characters in items: + charactersImg = characters[1] + characters = characters[0] BGT_O = openFile.BG_MAX_TEAMPLE.copy() i = 0 person = assets.character(characters.id) task = [] - task.append(Mini().creat_bg(person.rarity,person.element.value,person.images.banner.url,characters,lang["lvl"])) - #charter = await Mini().creat_bg(person.rarity,person.element.value,person.images.banner.url,characters,lang["lvl"]) - task.append(Mini().weapon(characters.equipments[-1],characters.image.icon.filename.replace("CostumeFloral","").split("AvatarIcon_")[1],person.element.value)) - #weaponR = await Mini().weapon(characters.equipments[-1],characters.image.icon.filename.replace("CostumeFloral","").split("AvatarIcon_")[1],person.element.value) - statBg = open_frame_element(person.element.value) + task.append(Mini().creat_bg(person.rarity,characters.element.value,person.images.banner.url,characters,lang["lvl"],charactersImg)) + task.append(Mini().weapon(characters.equipments[-1],characters.image.icon.filename.replace("CostumeFloral","").split("AvatarIcon_")[1],characters.element.value,lang["lvl"])) + statBg = open_frame_element(characters.element.value) task.append(stats(characters.stats,statBg)) - #statsInfo = await stats(characters.stats,statBg) - task.append(artifactAdd(characters,person.element.value)) - #artBg = await artifactAdd(characters,person.element.value) + task.append(artifactAdd(characters,characters.element.value)) ec = await asyncio.gather(*task) @@ -467,8 +474,9 @@ async def generationFour(items,assets,lang, mini = True, userName = "User", uid BGT_O.alpha_composite(ec[0],(35,102)) result.append(BGT_O) i = 0 + for key in result: - BGT.paste(key,(positionResultat[i]),key) + BGT.alpha_composite(key,(positionResultat[i])) i += 1 d = ImageDraw.Draw(BGT) diff --git a/enkanetworkcard/src/utils/CreatBannerOne.py b/enkanetworkcard/src/utils/CreatBannerOne.py index 3d9f65c..308c335 100644 --- a/enkanetworkcard/src/utils/CreatBannerOne.py +++ b/enkanetworkcard/src/utils/CreatBannerOne.py @@ -70,12 +70,12 @@ async def weaponAdd(characters,lvlName): if str(substate.type) == "DigitType.PERCENT": proc = True if imageStats: - WeaponBg.paste(imageStats,(300,53),imageStats) + WeaponBg.alpha_composite(imageStats,(300,53)) stars = star(characters.detail.rarity) image = await imagSize(link = characters.detail.icon.url,size = (114,121)) - WeaponBg.paste(image,(0,0),image) - WeaponBg.paste(WeaponBgUp,(0,0),WeaponBgUp) + WeaponBg.alpha_composite(image,(0,0)) + WeaponBg.alpha_composite(WeaponBgUp,(0,0)) position,font = await centrText(name, witshRam = 315, razmer = 24, start = 159, Yram = 30, y = 13) d.text(position, str(name), font= font, fill=coloring) d.text((435 ,53), f"R{lvlUp}", font= fontSize(24), fill=(248,199,135,255)) @@ -90,7 +90,7 @@ async def weaponAdd(characters,lvlName): else: position,font = await centrText(str(dopStat), witshRam = 90, razmer = 24, start = 320, Yram = 30, y = 50) d.text(position, str(dopStat), font= font, fill=coloring) - WeaponBg.paste(stars,(0,0),stars) + WeaponBg.alpha_composite(stars,(0,0)) return WeaponBg @@ -103,35 +103,60 @@ async def nameBanner(characters,person,lvlName): centrName,fonts = await centrText(f"{lvlName}: {characters.level}/90", witshRam = 148, razmer = 17, start = 5) d.text((centrName,2), f"{lvlName}: {characters.level}/90", font = fonts, fill= coloring) stars = star(person.rarity) - NameBg.paste(stars,(63,68),stars) + NameBg.alpha_composite(stars,(59,68)) return NameBg async def stats(characters,assets): g = characters.stats - maxStat = 0 - elementUp = None + elementUp = True dopVal = {} - cout = 0 + postion = (26,37) + AttributeBg = openFile.AttributeBgTeampleOne.copy() + + for key in g: if key[0] in ["BASE_HP","FIGHT_PROP_BASE_ATTACK","FIGHT_PROP_BASE_DEFENSE"]: if not key[0] in dopVal: dopVal[key[0]] = int(key[1].value) - cout += 1 - if cout == 3: - break - postion = (26,37) - AttributeBg = openFile.AttributeBgTeampleOne.copy() - for key in reversed(list(g)): - if key[1].value == 0: - continue + if key[1].id in [2000,2001,2002]: + iconImg = getIconAdd(key[0]) + Attribute = openFile.AttributeTeampleOne.copy() + d = ImageDraw.Draw(Attribute) + txt = assets.get_hash_map(key[0]) + icon = await imagSize(image = iconImg,fixed_width = 23) + Attribute.alpha_composite(icon, (4,0)) + if not key[1].id in stat_perc: + value = str(math.ceil(key[1].value)) + else: + value = f"{round(key[1].value * 100, 1)}%" + pX,fnt = await centrText(value, witshRam = 119, razmer = 20, start = 325) + d.text((pX,3), value, font = fnt, fill=coloring) + + d.text((42,4), str(txt), font = fontSize(18), fill=coloring) + + AttributeBg.alpha_composite(Attribute,(postion[0],postion[1])) + ''' + dopValueBg = openFile.AttributeDopValueTeampleOne.copy() + dv = ImageDraw.Draw(dopValueBg) + if key[0] in dopStatAtribute: + dopStatVal = dopVal[dopStatAtribute[key[0]]] + dopStatValArtifact = int(key[1].value - dopStatVal) + if dopStatValArtifact != 0: + pX,fnt = await centrText(f"{dopStatVal} + {dopStatValArtifact}", witshRam = 113, razmer = 13, start = 0) + dv.text((pX,-1),f"{dopStatVal} + {dopStatValArtifact}", font = fnt, fill=(248,199,135)) + AttributeBg.alpha_composite(dopValueBg,(354,postion[1]+27)) + ''' + postion = (postion[0],postion[1]+39) + + for key in g: if key[1].id in [40,41,42,43,44,45,46]: - if key[1].value > maxStat: - elementUp = key - maxStat = key[1].value - if key[1].id == 40: - key = elementUp + if elementUp: + key = max((x for x in g if 40 <= x[1].id <= 46), key=lambda x: x[1].value) + elementUp = False else: continue + if key[1].value == 0 or key[1].id in [2000,2001,2002]: + continue iconImg = getIconAdd(key[0]) if not iconImg: continue @@ -140,7 +165,7 @@ async def stats(characters,assets): txt = assets.get_hash_map(key[0]) icon = await imagSize(image = iconImg,fixed_width = 23) - Attribute.paste(icon, (4,0),icon) + Attribute.alpha_composite(icon, (4,0)) if not key[1].id in stat_perc: value = str(math.ceil(key[1].value)) @@ -151,8 +176,8 @@ async def stats(characters,assets): d.text((42,4), str(txt), font = fontSize(18), fill=coloring) - AttributeBg.paste(Attribute,(postion[0],postion[1]),Attribute) - + AttributeBg.alpha_composite(Attribute,(postion[0],postion[1])) + ''' dopValueBg = openFile.AttributeDopValueTeampleOne.copy() dv = ImageDraw.Draw(dopValueBg) if key[0] in dopStatAtribute: @@ -162,37 +187,37 @@ async def stats(characters,assets): pX,fnt = await centrText(f"{dopStatVal} + {dopStatValArtifact}", witshRam = 113, razmer = 13, start = 0) dv.text((pX,-1),f"{dopStatVal} + {dopStatValArtifact}", font = fnt, fill=(248,199,135)) AttributeBg.paste(dopValueBg,(354,postion[1]+27),dopValueBg) - + ''' postion = (postion[0],postion[1]+39) return AttributeBg -async def constant(characters,person): +async def constant(characters,element): constantRes = [] for key in characters.constellations: closeConstBg = openFile.ClossedBg.copy() closeConsticon = openFile.Clossed.copy() - openConstBg = openImageElementConstant(person.element.value) + openConstBg = openImageElementConstant(element) imageIcon = await imgD(link = key.icon.url) imageIcon = imageIcon.resize((43,48)) if not key.unlocked: - closeConstBg.paste(imageIcon, (19,20),imageIcon) - closeConstBg.paste(closeConsticon, (0,0),closeConsticon) + closeConstBg.alpha_composite(imageIcon, (19,20)) + closeConstBg.alpha_composite(closeConsticon, (-1,0)) const = closeConstBg else: - openConstBg.paste(imageIcon, (19,20),imageIcon) + openConstBg.alpha_composite(imageIcon, (19,20)) const = openConstBg constantRes.append(const) return constantRes -async def create_picture(person,imgs,adapt,splash = None): +async def create_picture(person,element,imgs,adapt,splash = None): if imgs: - frame = userImage(imgs, element = person.element.value, adaptation = adapt) + frame = userImage(imgs, element = element, adaptation = adapt) else: if splash: banner = await imagSize(link = splash,size = (2048,1024)) else: banner = await imagSize(link = person.images.banner.url,size = (2048,1024)) - frame = maskaAdd(person.element.value,banner) + frame = maskaAdd(element,banner) return frame async def talants(characters): @@ -207,11 +232,13 @@ async def talants(characters): d = ImageDraw.Draw(talantsCount) imagesIconTalants = await imgD(link = key.icon.url) imagesIconTalants = imagesIconTalants.resize((50,50)) - talantsBg.paste(imagesIconTalants, (8,7),imagesIconTalants) - talantsBg.paste(imagesIconTalants, (8,7),imagesIconTalants) - px,fnt = await centrText(key.level, witshRam = 25, razmer = 17, start = 3, Yram = 16, y = -1) - d.text(px, str(key.level), font = fnt, fill=(248,199,135,255)) - talantsBg.paste(talantsCount, (19,53),talantsCount) + talantsBg.alpha_composite(imagesIconTalants, (8,7)) + if len(str(key.level)) == 2: + d.text((6,-1), str(key.level), font = fontSize(15), fill=(248,199,135,255)) + else: + d.text((9,-1), str(key.level), font = fontSize(15), fill=(248,199,135,255)) + + talantsBg.alpha_composite(talantsCount, (19,53)) tallantsRes.append(talantsBg) count+=1 if count == 3: @@ -230,9 +257,9 @@ async def naborArtifact(info,ArtifactNameBg): position = (151,34) for key in naborAll: if len(naborAll) == 1: - ArtifactNameBg.paste(key,(151,54),key) + ArtifactNameBg.alpha_composite(key,(151,54)) else: - ArtifactNameBg.paste(key,position,key) + ArtifactNameBg.alpha_composite(key,position) position = (position[0],position[1]+29) return ArtifactNameBg @@ -247,7 +274,7 @@ async def creatDopStat(infpart): if str(key.type) == "DigitType.PERCENT": v = f"{v}%" imageStats= await imagSize(image = imageStats,fixed_width = 17) - ArtifactDopStat.paste(imageStats,(3,1),imageStats) + ArtifactDopStat.alpha_composite(imageStats,(3,1)) px,fnt = await centrText(v, witshRam = 142, razmer = 24, start = 33) d = ImageDraw.Draw(ArtifactDopStat) d.text((px,-2), v, font= fnt, fill=coloring) @@ -260,8 +287,8 @@ async def creatArtifact(infpart,imageStats): ArtifactBgUp = openFile.ArtifactBgUpTeampleOne.copy() ArtifactBg = openFile.ArtifactBgTeampleOne.copy() artimg = await imagSize(link = infpart.detail.icon.url,size = (175,175)) - ArtifactBg.paste(artimg,(-32,-27),artimg) - ArtifactBg.paste(ArtifactBgUp,(0,0),ArtifactBgUp) + ArtifactBg.alpha_composite(artimg,(-32,-27)) + ArtifactBg.alpha_composite(ArtifactBgUp,(0,0)) d = ImageDraw.Draw(ArtifactBg) if str(infpart.detail.mainstats.type) == "DigitType.PERCENT": val = f"{infpart.detail.mainstats.value}%" @@ -269,13 +296,13 @@ async def creatArtifact(infpart,imageStats): val = infpart.detail.mainstats.value centrName,fonts = await centrText(val, witshRam = 52, razmer = 17, start = 65) d.text((centrName,62), str(val), font= fonts, fill=coloring) - ArtifactBg.paste(imageStats,(3,0),imageStats) + ArtifactBg.alpha_composite(imageStats,(3,0)) d.text((77,82), str(infpart.level), font= fontSize(17), fill=coloring) starsImg = star(infpart.detail.rarity) - ArtifactBg.paste(starsImg,(16,96),starsImg) + ArtifactBg.alpha_composite(starsImg,(16,96)) positions = (159,8) for k in dopVaulImg: - ArtifactBg.paste(k,(positions),k) + ArtifactBg.alpha_composite(k,(positions)) positions = (positions[0],positions[1]+28) return ArtifactBg @@ -307,21 +334,21 @@ async def artifacAdd(characters): def addConst(frameConst,constantRes): position = (2,157) for key in constantRes: - frameConst.paste(key ,(position[0],position[1]),key) + frameConst.alpha_composite(key ,(position[0],position[1])) position = (position[0],position[1]+84) return frameConst def addTallants(frameTallants,talatsRes): positionAddTallants = (530,342) for key in talatsRes: - frameTallants.paste(key ,(positionAddTallants[0],positionAddTallants[1]),key) + frameTallants.alpha_composite(key ,(positionAddTallants[0],positionAddTallants[1])) positionAddTallants = (positionAddTallants[0],positionAddTallants[1]+95) return frameTallants def addArtifact(frameArtifact,artifacRes): position = (1141 ,42) for key in artifacRes: - frameArtifact.paste(key ,(position[0],position[1]),key) + frameArtifact.alpha_composite(key ,(position[0],position[1])) position = (position[0],position[1]+143) return frameArtifact @@ -337,14 +364,14 @@ def signature(hide,uid): return SignatureText async def appedFrame(frame,weaponRes,nameRes,statRes,constantRes,talatsRes,artifacRes,artifactSet,signatureRes): - banner = addConst(frame,constantRes) + banner = addConst(frame.convert("RGBA"),constantRes) banner = addTallants(banner,talatsRes) banner = addArtifact(banner,artifacRes) - banner.paste(weaponRes ,(610,39),weaponRes ) - banner.paste(nameRes ,(138,646),nameRes ) - banner.paste(statRes ,(610,189),statRes) - banner.paste(artifactSet ,(610,617),artifactSet) - banner.paste(signatureRes ,(910,747),signatureRes) + banner.alpha_composite(weaponRes ,(610,39)) + banner.alpha_composite(nameRes ,(138,646)) + banner.alpha_composite(statRes ,(610,189)) + banner.alpha_composite(artifactSet ,(610,617)) + banner.alpha_composite(signatureRes ,(910,747)) return banner @@ -356,12 +383,12 @@ async def generationOne(characters,assets,img,adapt,signatureRes,lvl,splash): task = [] try: if splash: - task.append(create_picture(person,img,adapt,characters.image.banner.url)) + task.append(create_picture(person,characters.element.value,img,adapt,characters.image.banner.url)) else: - task.append(create_picture(person,img,adapt)) + task.append(create_picture(person,characters.element.value,img,adapt)) task.append(weaponAdd(characters.equipments[-1],lvl)) task.append(stats(characters,assets)) - task.append(constant(characters,person)) + task.append(constant(characters,characters.element.value)) task.append(talants(characters)) task.append(artifacAdd(characters)) diff --git a/enkanetworkcard/src/utils/CreatBannerTree.py b/enkanetworkcard/src/utils/CreatBannerTree.py index ac63d69..1eef354 100644 --- a/enkanetworkcard/src/utils/CreatBannerTree.py +++ b/enkanetworkcard/src/utils/CreatBannerTree.py @@ -9,15 +9,15 @@ from .options import * from . import openFile -async def characterBackground(person,imgs,adapt,splash = None): +async def characterBackground(person,element,imgs,adapt,splash = None): if imgs: - frame = userImageTree(imgs, element = person.element.value, adaptation = adapt) + frame = userImageTree(imgs, element = element, adaptation = adapt) else: if splash: banner = await imagSize(link = splash,size = (2351,1168)) else: banner = await imagSize(link = person.images.banner.url,size = (2351,1168)) - frame = maskaAdd(person.element.value, banner, teample = 3) + frame = maskaAdd(element, banner, teample = 3) return frame async def infoCharter(bg,characters,lvlName): @@ -28,7 +28,7 @@ async def infoCharter(bg,characters,lvlName): d.text((37,98),f"{lvlName['lvl']}: {characters.level}/90",font = fontSize(24), fill=coloring) d.text((83,145), str(characters.friendship_level), font = fontSize(24), fill=(0,0,0,255)) d.text((83,144), str(characters.friendship_level), font = fontSize(24), fill=coloring) - bg.paste(openFile.FRENDS,(37,142),openFile.FRENDS) + bg.alpha_composite(openFile.FRENDS,(37,142)) return bg async def talants(characters): @@ -42,11 +42,11 @@ async def talants(characters): d = ImageDraw.Draw(talantsBg) imagesIconTalants = await imgD(link = key.icon.url) imagesIconTalants = imagesIconTalants.resize((67,67)) - talantsBg.paste(imagesIconTalants, (16,0),imagesIconTalants) + talantsBg.alpha_composite(imagesIconTalants, (16,0)) if len(str(key.level)) == 2: - d.text((36,67), str(key.level), font = fontSize(24), fill=coloring) + d.text((39,63), str(key.level), font = fontSize(24), fill=coloring) else: - d.text((41,66), str(key.level), font = fontSize(24), fill=coloring) + d.text((41,65), str(key.level), font = fontSize(24), fill=coloring) tallantsRes.append(talantsBg) count+=1 if count == 3: @@ -74,22 +74,22 @@ async def weapon(characters,lvlName): if str(substate.type) == "DigitType.PERCENT": proc = True if imageStats: - WeaponBg.paste(imageStats,(318,66),imageStats) + WeaponBg.alpha_composite(imageStats,(318,66)) stars = star(characters.detail.rarity).resize((93,31)) image = await imagSize(link = characters.detail.icon.url,size = (143,152)) - WeaponBg.paste(image,(6,0),image) - WeaponBg.paste(openFile.WeaponLight,(0,143),openFile.WeaponLight) - WeaponBg.paste(stars,(28,136),stars) + WeaponBg.alpha_composite(image,(6,0)) + WeaponBg.alpha_composite(openFile.WeaponLight,(0,143)) + WeaponBg.alpha_composite(stars,(28,136)) - position,font = await centrText(name, witshRam = 329, razmer = 24, start = 170) + position,font = await centrText(name, witshRam = 329, razmer = 24, start = 150) d.text((position,10), str(name), font= font, fill=(0,0,0,255)) d.text((position,9), str(name), font= font, fill=coloring) d.text((185 ,114), f"R{lvlUp}", font= fontSize(24), fill=(248,199,135,255)) - position,font = await centrText(f"{lvlName['lvl']}: {lvl}/90", witshRam = 240, razmer = 24, start = 245) - d.text((position,114), f"{lvlName['lvl']}: {lvl}/90", font= font, fill=coloring) + position,font = await centrText(f"{lvlName['lvl']}: {lvl}/90", witshRam = 240, razmer = 24, start = 240) + d.text((position,113), f"{lvlName['lvl']}: {lvl}/90", font= font, fill=coloring) position,font = await centrText(baseAtt, witshRam = 79, razmer = 24, start = 214) d.text((position,64), str(baseAtt), font= font, fill=coloring) @@ -103,10 +103,10 @@ async def weapon(characters,lvlName): return WeaponBg -async def constant(characters,person): +async def constant(characters): constantRes = [] for key in characters.constellations: - openConstBg,closedConstBg = openImageElementConstant(person.element.value, teampt = 3) + openConstBg,closedConstBg = openImageElementConstant(characters.element.value, teampt = 3) openConstBg = openConstBg.resize((87,89)) closedConstBg = closedConstBg.resize((87,89)) @@ -114,12 +114,12 @@ async def constant(characters,person): imageIcon = imageIcon.resize((52,52)) if not key.unlocked: - closedConstBg.paste(imageIcon, (18,19),imageIcon) - closedConstBg.paste(openFile.ClosedConstTree, (20,21),openFile.ClosedConstTree) + closedConstBg.alpha_composite(imageIcon, (18,19)) + closedConstBg.alpha_composite(openFile.ClosedConstTree, (20,21)) const = closedConstBg else: - openConstBg.paste(imageIcon, (18,19),imageIcon) + openConstBg.alpha_composite(imageIcon, (18,19)) const = openConstBg constantRes.append(const) @@ -129,72 +129,78 @@ async def constant(characters,person): def appendTalat(bg,talantsL): position = (597,426) for key in talantsL: - bg.paste(key, position,key) + bg.alpha_composite(key, position) position = (position[0],position[1]+118) return bg def appendConst(bg,constL): position = (22,284) for key in constL: - bg.paste(key, position,key) + bg.alpha_composite(key, position) position = (position[0],position[1]+72) return bg def appendArt(bg,artif): position = (1327,19) for key in artif: - bg.paste(key, position,key) + bg.alpha_composite(key, position) position = (position[0],position[1]+156) return bg async def stats(AttributeBg,characters,assets): g = characters.stats - maxStat = 0 - elementUp = None + elementUp = True dopval = {} pos = (752,239) + d = ImageDraw.Draw(AttributeBg) for key in g: if key[0] in ["BASE_HP","FIGHT_PROP_BASE_ATTACK","FIGHT_PROP_BASE_DEFENSE"]: dopval[key[0]] = key[1].value - - for key in reversed(list(g)): - if key[1].value == 0: - continue + if key[1].id in [2000,2001,2002]: + iconImg = getIconAdd(key[0]) + icon = await imagSize(image = iconImg,fixed_width = 23) + AttributeBg.alpha_composite(icon,pos) + txt = assets.get_hash_map(key[0]) + if not key[1].id in stat_perc: + value = str(math.ceil(key[1].value)) + else: + value = f"{round(key[1].value * 100, 1)}%" + x,y = fontSize(24).getsize(value) + d.text((pos[0]+520-x,pos[1]), value, font = fontSize(24), fill=coloring) + d.text((pos[0]+41,pos[1]), str(txt), font = fontSize(18), fill=coloring) + if key[0] in dopStatAtribute: + dopStatVal = int(dopval[dopStatAtribute[key[0]]]) + dopStatValArtifact = int(key[1].value - dopval[dopStatAtribute[key[0]]]) + if dopStatValArtifact != 0: + xx,y = fontSize(15).getsize(f"+{dopStatValArtifact}") + d.text((pos[0]+520-xx,pos[1]+30),f"+{dopStatValArtifact}", font = fontSize(15), fill=(141,231,141)) + x,y = fontSize(15).getsize(f"+{dopStatVal}") + d.text((pos[0]+520-x-xx,pos[1]+30),str(dopStatVal), font = fontSize(15), fill=coloring) + pos = (pos[0],pos[1]+59) + for key in g: if key[1].id in [40,41,42,43,44,45,46]: - if key[1].value > maxStat: - elementUp = key - maxStat = key[1].value - if key[1].id == 40: - key = elementUp + if elementUp: + key = max((x for x in g if 40 <= x[1].id <= 46), key=lambda x: x[1].value) + elementUp = False else: continue - + if key[1].value == 0 or key[1].id in [2000,2001,2002]: + continue iconImg = getIconAdd(key[0]) if not iconImg: continue txt = assets.get_hash_map(key[0]) icon = await imagSize(image = iconImg,fixed_width = 23) - AttributeBg.paste(icon,pos,icon) + AttributeBg.alpha_composite(icon,pos) if not key[1].id in stat_perc: value = str(math.ceil(key[1].value)) else: value = f"{round(key[1].value * 100, 1)}%" - d = ImageDraw.Draw(AttributeBg) x,y = fontSize(24).getsize(value) d.text((pos[0]+520-x,pos[1]), value, font = fontSize(24), fill=coloring) d.text((pos[0]+41,pos[1]), str(txt), font = fontSize(18), fill=coloring) - - if key[0] in dopStatAtribute: - dopStatVal = int(key[1].value) - dopStatValArtifact = int(key[1].value - dopval[dopStatAtribute[key[0]]]) - if dopStatValArtifact != 0: - xx,y = fontSize(15).getsize(f"+{dopStatValArtifact}") - d.text((pos[0]+520-xx,pos[1]+30),f"+{dopStatValArtifact}", font = fontSize(15), fill=(141,231,141)) - x,y = fontSize(15).getsize(f"+{dopStatVal}") - d.text((pos[0]+520-x-xx,pos[1]+30),str(dopStatVal), font = fontSize(15), fill=coloring) - - pos = (pos[0],pos[1]+62) + pos = (pos[0],pos[1]+53) return AttributeBg @@ -205,21 +211,21 @@ async def naborArtifact(info,ArtifactNameBg): count += 1 if count != 0: d = ImageDraw.Draw(ArtifactNameBg) - ArtifactNameBg.paste(openFile.ArtifactSetIcon,(749,721),openFile.ArtifactSetIcon) + ArtifactNameBg.alpha_composite(openFile.ArtifactSetIcon,(749,721)) position = (1250,722) for key in info: if info[key] > 1: if count == 1: - ArtifactNameBg.paste(openFile.ArtifactSetCount,(1234,738),openFile.ArtifactSetCount) + ArtifactNameBg.alpha_composite(openFile.ArtifactSetCount,(1234,738)) centrName,fonts = await centrText(key, witshRam = 367 , razmer = 20, start = 840) d.text((centrName,740), str(key), font= fonts, fill=(141,231,141)) - d.text((1248 ,739), str(info[key]), font= fontSize(24), fill=coloring) + d.text((1245 ,739), str(info[key]), font= fontSize(24), fill=coloring) break else: - ArtifactNameBg.paste(openFile.ArtifactSetCount,(1234,position[1]),openFile.ArtifactSetCount) + ArtifactNameBg.alpha_composite(openFile.ArtifactSetCount,(1234,position[1])) centrName,fonts = await centrText(key, witshRam = 367 , razmer = 20, start = 840) d.text((centrName,position[1]), str(key), font= fonts, fill=(141,231,141)) - d.text((1248 ,position[1]), str(info[key]), font= fontSize(24), fill=coloring) + d.text((1245 ,position[1]), str(info[key]), font= fontSize(24), fill=coloring) position = (position[0],position[1]+28) return ArtifactNameBg @@ -229,7 +235,7 @@ async def creatArtifact(infpart,imageStats): ArtifactUp = openFile.ArtifactMaska.copy().convert('L') artimg = await imagSize(link = infpart.detail.icon.url,size = (233,233)) - ArtifactBg.paste(artimg,(-57,-53),artimg) + ArtifactBg.alpha_composite(artimg,(-57,-53)) ArtifactBg = Image.composite(ArtifactBg, ArtifactBgs, ArtifactUp) d = ImageDraw.Draw(ArtifactBg) @@ -239,11 +245,11 @@ async def creatArtifact(infpart,imageStats): val = infpart.detail.mainstats.value x,y = fontSize(32).getsize(str(val)) d.text((174-x,56), str(val), font= fontSize(32), fill=coloring) - ArtifactBg.paste(imageStats,(150,20),imageStats) + ArtifactBg.alpha_composite(imageStats,(150,20)) d.text((136,100), f"+{infpart.level}", font= fontSize(17), fill=coloring) starsImg = star(infpart.detail.rarity).resize((83,29)) - ArtifactBg.paste(starsImg,(51,96),starsImg) + ArtifactBg.alpha_composite(starsImg,(51,96)) cs = 0 positionIcon = (221,26) for key in infpart.detail.substats: @@ -254,7 +260,7 @@ async def creatArtifact(infpart,imageStats): if not imageStats: continue imageStats= await imagSize(image = imageStats,fixed_width = 26) - ArtifactBg.paste(imageStats,positionIcon,imageStats) + ArtifactBg.alpha_composite(imageStats,positionIcon) d.text((positionIcon[0]+32,positionIcon[1]), v, font= fontSize(24), fill=coloring) cs += 1 positionIcon = (positionIcon[0]+143,positionIcon[1]) @@ -288,7 +294,7 @@ async def itog(listArt,talansRes,rezConstant,weaponRes,rezArt,signatureRes): res = appendTalat(listArt,talansRes) res = appendConst(res,rezConstant) res = appendArt(res,rezArt) - res.paste(weaponRes,(746,33),weaponRes) + res.alpha_composite(weaponRes,(746,33)) d = ImageDraw.Draw(res) d.text((31,757), signatureRes, font= fontSize(24), fill=coloring) @@ -299,11 +305,11 @@ async def generationTree(characters,assets,img,adapt,signatureRes,lvl, splash): task = [] try: if splash: - task.append(characterBackground(person,img,adapt,characters.image.banner.url)) + task.append(characterBackground(person,characters.element.value,img,adapt,characters.image.banner.url)) else: - task.append(characterBackground(person,img,adapt)) + task.append(characterBackground(person,characters.element.value,img,adapt)) task.append(talants(characters)) - task.append(constant(characters,person)) + task.append(constant(characters)) task.append(weapon(characters.equipments[-1],lvl)) task.append(artifacAdd(characters)) @@ -313,4 +319,5 @@ async def generationTree(characters,assets,img,adapt,signatureRes,lvl, splash): listArt = await naborArtifact(ec[4]["nabor"],statRes) return await itog(listArt, ec[1],ec[2],ec[3],ec[4]["artifact"],signatureRes) except Exception as e: + raise print("ERROR: ", e) \ No newline at end of file diff --git a/enkanetworkcard/src/utils/CreatBannerTwo.py b/enkanetworkcard/src/utils/CreatBannerTwo.py index 1269b52..b071ee9 100644 --- a/enkanetworkcard/src/utils/CreatBannerTwo.py +++ b/enkanetworkcard/src/utils/CreatBannerTwo.py @@ -22,15 +22,15 @@ from .options import * from . import openFile -async def create_picture(person,imgs,adapt,splash = None): +async def create_picture(person,element,imgs,adapt,splash = None): if imgs: - frame = userImageTwo(imgs, element = person.element.value, adaptation = adapt) + frame = userImageTwo(imgs, element = element, adaptation = adapt) else: if splash: banner = await imagSize(link = splash,size = (1974,1048)) else: banner = await imagSize(link = person.images.banner.url, size = (1974,1048)) - frame = maskaAdd(person.element.value, banner, teample = 2) + frame = maskaAdd(element, banner, teample = 2) return frame @@ -54,11 +54,11 @@ async def weaponAdd(characters,lvlName): if str(substate.type) == "DigitType.PERCENT": proc = True if imageStats: - WeaponBg.paste(imageStats,(330,59),imageStats) + WeaponBg.alpha_composite(imageStats,(330,59)) stars = star(characters.detail.rarity) image = await imagSize(link = characters.detail.icon.url, size = (131,138)) - WeaponBg.paste(image,(20,11),image) + WeaponBg.alpha_composite(image,(20,11)) position,font = await centrText(name, witshRam = 290, razmer = 24, start = 177, Yram = 38, y = 17) d.text(position, str(name), font= font, fill=coloring) d.text((195 ,111), str(lvlUp), font= fontSize(24), fill=(248,199,135,255)) @@ -73,24 +73,24 @@ async def weaponAdd(characters,lvlName): else: position,font = await centrText(str(dopStat), witshRam = 131, razmer = 24, start = 333, Yram = 38, y = 56) d.text(position, str(dopStat), font= font, fill=coloring) - WeaponBg.paste(stars,(10,135),stars) + WeaponBg.alpha_composite(stars,(10,135)) return WeaponBg async def nameBanner(characters,lvlName): NameBg = openFile.NameBgTeampleTwo.copy() d = ImageDraw.Draw(NameBg) centrName,fonts = await centrText(characters.name, witshRam = 244, razmer = 24,start = 19, Yram = 29, y = 0) - d.text((centrName,1), characters.name, font = fonts, fill=coloring) - d.text((33,47), str(characters.friendship_level), font = fontSize(24), fill= coloring) + d.text((centrName,0), characters.name, font = fonts, fill=coloring) + d.text((33,45), str(characters.friendship_level), font = fontSize(24), fill= coloring) centrName,fonts = await centrText(f"{lvlName['lvl']}: {characters.level}/90", witshRam = 209, razmer = 24, start = 77) - d.text((centrName,47), f"{lvlName['lvl']}: {characters.level}/90", font = fonts, fill= coloring) + d.text((centrName,45), f"{lvlName['lvl']}: {characters.level}/90", font = fonts, fill= coloring) return NameBg def starsAdd(person): StarsBg = openFile.StarBg.copy() starsIcon = star(person.rarity) - StarsBg.paste(starsIcon,(17,0),starsIcon) + StarsBg.alpha_composite(starsIcon,(17,-1)) return StarsBg @@ -99,39 +99,54 @@ async def stats(characters,assets): AttributeBg = openFile.AttributeBgTeampleTwo.copy() g = characters.stats dopVal = {} - cout = 0 - maxStat = 0 - elementUp = None - + elementUp = True + сout = 0 for key in g: if key[0] in ["BASE_HP","FIGHT_PROP_BASE_ATTACK","FIGHT_PROP_BASE_DEFENSE"]: if not key[0] in dopVal: dopVal[key[0]] = int(key[1].value) - cout += 1 - if cout == 3: - break - for key in reversed(list(g)): - - if key[1].value == 0: + if key[1].id in [2000,2001,2002]: + iconImg = getIconAdd(key[0]) + txt = assets.get_hash_map(key[0]) + Attribute = openFile.AttributeTeampleTwo.copy() + d = ImageDraw.Draw(Attribute) + icon = await imagSize(image = iconImg,fixed_width = 26) + + Attribute.alpha_composite(icon, (10,4)) + + if not key[1].id in stat_perc: + value = str(math.ceil(key[1].value)) + else: + value = f"{round(key[1].value * 100, 1)}%" + pX,fnt = await centrText(value, witshRam = 151, razmer = 24, start = 410) + d.text((pX,7), value, font = fnt, fill=coloring) + + d.text((67,7), str(txt), font = fontSize(24), fill=coloring) + + AttributeBg.alpha_composite(Attribute,(postion[0],postion[1])) + postion = (postion[0],postion[1]+55) + сout += 1 + if сout == 3: + break + for key in g: + if key[1].id in [40,41,42,43,44,45,46]: + if elementUp: + key = max((x for x in g if 40 <= x[1].id <= 46), key=lambda x: x[1].value) + elementUp = False + else: + continue + if key[1].value == 0 or key[1].id in [2000,2001,2002]: continue iconImg = getIconAdd(key[0]) if not iconImg: continue - if key[1].id in [40,41,42,43,44,45,46]: - if key[1].value > maxStat: - elementUp = key - maxStat = key[1].value - if key[1].id == 40: - key = elementUp - else: - continue txt = assets.get_hash_map(key[0]) Attribute = openFile.AttributeTeampleTwo.copy() d = ImageDraw.Draw(Attribute) icon = await imagSize(image = iconImg,fixed_width = 26) - Attribute.paste(icon, (10,4),icon) + Attribute.alpha_composite(icon, (10,4)) if not key[1].id in stat_perc: value = str(math.ceil(key[1].value)) @@ -142,39 +157,30 @@ async def stats(characters,assets): d.text((67,7), str(txt), font = fontSize(24), fill=coloring) - AttributeBg.paste(Attribute,(postion[0],postion[1]),Attribute) - ''' - if key[0] in dopStatAtribute: - ad = ImageDraw.Draw(AttributeBg) - dopStatVal = dopVal[dopStatAtribute[key[0]]] - dopStatValArtifact = int(key[1].value - dopStatVal) - if dopStatValArtifact != 0: - ad.text((pX+5,postion[1]+23), f"{dopStatVal} + {dopStatValArtifact}", font = fontSize(15), fill=(248,199,135)) - ''' + AttributeBg.alpha_composite(Attribute,(postion[0],postion[1])) postion = (postion[0],postion[1]+55) return AttributeBg -async def constant(characters,person): +async def constant(characters): constantRes = [] for key in characters.constellations: closeConstBg = openFile.ClossedBg.copy() closeConsticon = openFile.Clossed.copy() - openConstBg = openImageElementConstant(person.element.value) + openConstBg = openImageElementConstant(characters.element.value) imageIcon = await imgD(link = key.icon.url) imageIcon = imageIcon.resize((43,48)) if not key.unlocked: - closeConstBg.paste(imageIcon, (19,20),imageIcon) - closeConstBg.paste(closeConsticon, (0,0),closeConsticon) + closeConstBg.alpha_composite(imageIcon, (19,20)) + closeConstBg.alpha_composite(closeConsticon, (0,-2)) const = closeConstBg else: - openConstBg.paste(imageIcon, (19,20),imageIcon) + openConstBg.alpha_composite(imageIcon, (19,20)) const = openConstBg constantRes.append(const) return constantRes async def talants(characters): - count = 0 tallantsRes = [] for key in characters.skills: if key.level > 9: @@ -185,15 +191,15 @@ async def talants(characters): d = ImageDraw.Draw(talantsCount) imagesIconTalants = await imgD(link = key.icon.url) imagesIconTalants = imagesIconTalants.resize((52,52)) - talantsBg.paste(imagesIconTalants, (7,6),imagesIconTalants) - px,fnt = await centrText(key.level, witshRam = 25, razmer = 18, start = 1, Yram = 25, y = 1) - d.text(px, str(key.level), font = fnt, fill=(248,199,135,255)) - talantsBg.paste(talantsCount, (20,47),talantsCount) + talantsBg.alpha_composite(imagesIconTalants, (7,6)) + if len(str(key.level)) == 2: + d.text((3,2), str(key.level), font = fontSize(18), fill=(248,199,135,255)) + else: + d.text((6,2), str(key.level), font = fontSize(18), fill=(248,199,135,255)) + talantsBg.alpha_composite(talantsCount, (20,47)) tallantsRes.append(talantsBg) - count+=1 - if count == 3: - break return tallantsRes + async def naborArtifact(info,ArtifactNameBg): naborAll = [] for key in info: @@ -201,15 +207,15 @@ async def naborArtifact(info,ArtifactNameBg): ArtifactNameFrame = openFile.ArtifactNameFrameTeampleTwo.copy() d = ImageDraw.Draw(ArtifactNameFrame) centrName,fonts = await centrText(key, witshRam = 289, razmer = 24, start = 2, Yram = 28, y = 1) - d.text(centrName, str(key), font= fonts, fill=coloring) + d.text((centrName[0],0), str(key), font= fonts, fill=coloring) d.text((356,0), str(info[key]), font= fontSize(24), fill=coloring) naborAll.append(ArtifactNameFrame) position = (156,38) for key in naborAll: if len(naborAll) == 1: - ArtifactNameBg.paste(key,(156,54),key) + ArtifactNameBg.alpha_composite(key,(156,54)) else: - ArtifactNameBg.paste(key,position,key) + ArtifactNameBg.alpha_composite(key,position) position = (position[0],position[1]+34) return ArtifactNameBg @@ -219,20 +225,20 @@ async def creatArtifact(infpart,imageStats): ArtifactBg = openFile.ArtifactBgTeampleTwo.copy() ArtifactUp = openFile.ArtifactBgUpTeampleTwo.copy() artimg = await imagSize(link = infpart.detail.icon.url,size = (120,107)) - ArtifactBg.paste(artimg,(-5,0),artimg) - ArtifactBg.paste(ArtifactUp,(0,0),ArtifactUp) + ArtifactBg.alpha_composite(artimg,(-5,0)) + ArtifactBg.alpha_composite(ArtifactUp,(0,0)) d = ImageDraw.Draw(ArtifactBg) if str(infpart.detail.mainstats.type) == "DigitType.PERCENT": val = f"{infpart.detail.mainstats.value}%" else: val = infpart.detail.mainstats.value - centrName,fonts = await centrText(val, witshRam = 62, razmer = 17, start = 53) - d.text((centrName,77), str(val), font= fonts, fill=coloring) + centrName,fonts = await centrText(val, witshRam = 62, razmer = 17, start = 50) + d.text((centrName,76), str(val), font= fonts, fill=coloring) - ArtifactBg.paste(imageStats,(7,2),imageStats) + ArtifactBg.alpha_composite(imageStats,(7,2)) d.text((81,97), str(infpart.level), font= fontSize(17), fill=coloring) starsImg = star(infpart.detail.rarity).resize((77,22)) - ArtifactBg.paste(starsImg,(2,97),starsImg) + ArtifactBg.alpha_composite(starsImg,(2,97)) cs = 0 positionIcon = (130,21) for key in infpart.detail.substats: @@ -245,9 +251,9 @@ async def creatArtifact(infpart,imageStats): if not imageStats: continue imageStats= await imagSize(image = imageStats,fixed_width = 24) - ArtifactBgStat.paste(imageStats,(3,1),imageStats) + ArtifactBgStat.alpha_composite(imageStats,(3,1)) d.text((57,2), v, font= fontSize(24), fill=coloring) - ArtifactBg.paste(ArtifactBgStat,positionIcon,ArtifactBgStat) + ArtifactBg.alpha_composite(ArtifactBgStat,positionIcon) cs += 1 positionIcon = (positionIcon[0]+185,positionIcon[1]) if cs == 2: @@ -283,17 +289,25 @@ async def creatUserInfo(hide,uid,player,lang, nameCharter = None, namecard = Fal if not namecard: bannerUserNamecard = await imagSize(link = player.namecard.banner.url, size = (601,283)) else: - linkImgCard = f"https://enka.network/ui/UI_NameCardPic_{nameCharter}_P.png" - bannerUserNamecard = await imagSize(link = linkImgCard,size = (601,283)) + nameCharter = nameCharter.split("Costume")[0] + try: + if nameCharter in ["PlayerGirl","PlayerBoy"]: + linkImgCard = "https://api.ambr.top/assets/UI/namecard/UI_NameCardPic_0_P.png" + else: + linkImgCard = f"https://enka.network/ui/UI_NameCardPic_{nameCharter}_P.png" + bannerUserNamecard = await imagSize(link = linkImgCard,size = (601,283)) + except: + linkImgCard = f"https://enka.network/ui/UI_NameCardPic_{nameCharter}1_P.png" + bannerUserNamecard = await imagSize(link = linkImgCard,size = (601,283)) bannerUserNamecard = bannerUserNamecard.crop((0, 32, 601, 255)) defoldBgNamecard = openFile.infoUserBgTeampleTwo.copy() maskaBannerNamecard = openFile.infoUserMaskaTeampleTwo.copy().convert('L') defoldBgNamecard = Image.composite(defoldBgNamecard, bannerUserNamecard, maskaBannerNamecard) frameUserNamecard = openFile.infoUserFrameTeampleTwo.copy() - defoldBgNamecard.paste(openFile.infoUserFrameBannerTeampleTwo,(0,0),openFile.infoUserFrameBannerTeampleTwo) + defoldBgNamecard.alpha_composite(openFile.infoUserFrameBannerTeampleTwo,(0,0)) avatar = await imagSize(link = player.avatar.icon.url,size = (150,150)) avatar = Image.composite(frameUserNamecard, avatar, openFile.infoUserMaskaAvatarTeampleTwo.convert('L')) - frameUserNamecard.paste(avatar,(0,0),avatar) + frameUserNamecard.alpha_composite(avatar,(0,0)) d = ImageDraw.Draw(frameUserNamecard) centrName,fonts = await centrText(player.nickname, witshRam = 150, razmer = 19, start = 0) d.text((centrName,155), player.nickname, font= fonts, fill=coloring) @@ -305,7 +319,7 @@ async def creatUserInfo(hide,uid,player,lang, nameCharter = None, namecard = Fal d.text((205,3), "Hidden", font= fontSize(17), fill=coloring) else: d.text((205,3), str(uid), font= fontSize(17), fill=coloring) - defoldBgNamecard.paste(frameUserNamecard,(17,21),frameUserNamecard) + defoldBgNamecard.alpha_composite(frameUserNamecard,(17,21)) return defoldBgNamecard @@ -314,25 +328,25 @@ def addConst(frameConst,constantRes): bgConstant = openFile.ConstantBG.copy() for key in constantRes: - bgConstant.paste(key ,(position[0],position[1]),key) + bgConstant.alpha_composite(key ,(position[0],position[1])) position = (position[0]+87,position[1]) - frameConst.paste(bgConstant ,(698 ,899),bgConstant) + frameConst.alpha_composite(bgConstant ,(698 ,899)) return frameConst def addTallants(frameTallants,talatsRes): position = (49,0) bgTallatns = openFile.TalantsBGTeampleTwo.copy() for key in talatsRes: - bgTallatns.paste(key ,(position[0],position[1]),key) + bgTallatns.alpha_composite(key ,(position[0],position[1])) position = (position[0]+90,position[1]) - frameTallants.paste(bgTallatns ,(851 ,826),bgTallatns) + frameTallants.alpha_composite(bgTallatns ,(851 ,826)) return frameTallants def addArtifact(frameArtifact,artifacRes): position = (1455 ,290) for key in artifacRes: - frameArtifact.paste(key ,(position[0],position[1]),key) + frameArtifact.alpha_composite(key ,(position[0],position[1])) position = (position[0],position[1]+140) return frameArtifact @@ -341,33 +355,33 @@ def appedFrame(frame,weaponRes,nameRes,statRes,constantRes,talatsRes,artifacRes, banner = addTallants(banner,talatsRes) banner = addArtifact(banner,artifacRes) banner = frame - banner.paste(starsRes ,(964,710),starsRes) - banner.paste(nameRes ,(889,746),nameRes) - banner.paste(elementRes ,(893,990),elementRes) - banner.paste(signatureRes ,(27,67),signatureRes) - banner.paste(statRes ,(30,302),statRes) + banner.alpha_composite(starsRes ,(964,710)) + banner.alpha_composite(nameRes ,(889,746)) + banner.alpha_composite(elementRes ,(893,990)) + banner.alpha_composite(signatureRes ,(27,67)) + banner.alpha_composite(statRes ,(30,302)) if artifactSet: - banner.paste(artifactSet ,(27,839),artifactSet) - banner.paste(weaponRes ,(1455 ,65),weaponRes) - banner.paste(openFile.SignatureTwo ,(1583 ,992),openFile.SignatureTwo) + banner.alpha_composite(artifactSet ,(27,839)) + banner.alpha_composite(weaponRes ,(1455 ,65)) + banner.alpha_composite(openFile.SignatureTwo ,(1583 ,992)) return banner async def generationTwo(characters,assets,img,adapt,signatureRes,lvl, splash): person = assets.character(characters.id) starsRes = starsAdd(person) - elementRes = elementIconPanel(person.element.value) + elementRes = elementIconPanel(characters.element.value) tassk = [] if splash: - tassk.append(create_picture(person,img,adapt,characters.image.banner.url)) + tassk.append(create_picture(person,characters.element.value,img,adapt,characters.image.banner.url)) else: - tassk.append(create_picture(person,img,adapt)) + tassk.append(create_picture(person,characters.element.value,img,adapt)) tassk.append(weaponAdd(characters.equipments[-1],lvl)) tassk.append(nameBanner(characters,lvl)) tassk.append(stats(characters,assets)) - tassk.append(constant(characters,person)) + tassk.append(constant(characters)) tassk.append(talants(characters)) tassk.append(artifacAdd(characters)) ec = await asyncio.gather(*tassk) - result = appedFrame(ec[0],ec[1],ec[2],ec[3],ec[4],ec[5],ec[6]["art"],ec[6]["nab"],signatureRes,elementRes,starsRes) + result = appedFrame(ec[0].convert("RGBA"),ec[1],ec[2],ec[3],ec[4],ec[5],ec[6]["art"],ec[6]["nab"],signatureRes,elementRes,starsRes) return result diff --git a/enkanetworkcard/src/utils/FunctionsPill.py b/enkanetworkcard/src/utils/FunctionsPill.py index 1f4c169..d308542 100644 --- a/enkanetworkcard/src/utils/FunctionsPill.py +++ b/enkanetworkcard/src/utils/FunctionsPill.py @@ -18,8 +18,11 @@ async def dowloadImg(link = ""): async def imagSize(link = "", image = None, fixed_width = 0, size = None): if not image: - imgs = await dowloadImg(link = link) - imgs = Image.open(BytesIO(imgs)) + if link == "https://enka.network/ui/UI_Gacha_AvatarImg_PlayerGirl.png": + imgs = openFile.PlayerGirl.copy() + else: + imgs = await dowloadImg(link = link) + imgs = Image.open(BytesIO(imgs)) else: imgs = image if size: diff --git a/enkanetworkcard/src/utils/Generation.py b/enkanetworkcard/src/utils/Generation.py index f079d7f..d851615 100644 --- a/enkanetworkcard/src/utils/Generation.py +++ b/enkanetworkcard/src/utils/Generation.py @@ -20,7 +20,14 @@ def centryImage(userImages, teample = 1): if x > y or x == y: return userImages, -int(userImages.size[0]/2-300) else: - return userImages, -int(userImages.size[0]/2*0.2) + x,y = userImages.size + if x < 738: + return userImages, -int(userImages.size[0]/2*0.2) + else: + return userImages, -int(userImages.size[0]-738) + + + elif teample == 2: x,y = userImages.size baseheight = 1500 @@ -29,15 +36,35 @@ def centryImage(userImages, teample = 1): baseheight = 1048 hpercent = (baseheight / float (y)) wsize = int ((float (x) * float (hpercent))) - userImages = userImages.resize ((wsize, baseheight), Image.LANCZOS) + userImages = userImages.resize((wsize, baseheight), Image.LANCZOS) if x > y or x == y: return userImages, 0 else: return userImages, 555 + elif teample == 4: + x,y = userImages.size + baseheight = 965 + + if x > y or x == y: + baseheight = 621 + hpercent = (baseheight / float (y)) + wsize = int ((float (x) * float (hpercent))) + userImages = userImages.resize((wsize, baseheight), Image.LANCZOS) + + if x > y or x == y: + return userImages, -359 + else: + x,y = userImages.size + if x < 552: + return userImages, -int(userImages.size[0]/2*0.2) + else: + return userImages, -int(userImages.size[0]-552) + #return userImages, -116 else: + x,y = userImages.size - baseheight = 1337 + baseheight = 1311 if x > y or x == y: baseheight = 802 @@ -46,63 +73,67 @@ def centryImage(userImages, teample = 1): userImages = userImages.resize ((wsize, baseheight), Image.LANCZOS) if x > y or x == y: - return userImages, 0 + return userImages, -int(userImages.size[0]/2-300) else: - return userImages, 0 + x,y = userImages.size + if x < 806: + return userImages, 0 + else: + return userImages, -int(x-806) def openImageElement(element,teample = 1): if teample == 1: if element == "Fire": - return Image.open(f'{path}/teapmleOne/background/PYRO.png') + return Image.open(f'{path}/teapmleOne/background/PYRO.png').convert("RGBA") elif element== "Grass": - return Image.open(f'{path}/teapmleOne/background/DENDRO.png') + return Image.open(f'{path}/teapmleOne/background/DENDRO.png').convert("RGBA") elif element == "Electric": - return Image.open(f'{path}/teapmleOne/background/ELECTRO.png') + return Image.open(f'{path}/teapmleOne/background/ELECTRO.png').convert("RGBA") elif element == "Water": - return Image.open(f'{path}/teapmleOne/background/GYDRO.png') + return Image.open(f'{path}/teapmleOne/background/GYDRO.png').convert("RGBA") elif element == "Wind": - return Image.open(f'{path}/teapmleOne/background/ANEMO.png') + return Image.open(f'{path}/teapmleOne/background/ANEMO.png').convert("RGBA") elif element== "Rock": - return Image.open(f'{path}/teapmleOne/background/GEO.png') + return Image.open(f'{path}/teapmleOne/background/GEO.png').convert("RGBA") elif element == "Ice": - return Image.open(f'{path}/teapmleOne/background/CRYO.png') + return Image.open(f'{path}/teapmleOne/background/CRYO.png').convert("RGBA") else: - return Image.open(f'{path}/teapmleOne/background/ERROR.png') + return Image.open(f'{path}/teapmleOne/background/ERROR.png').convert("RGBA") elif teample == 2: if element == "Fire": - return Image.open(f'{path}/teapmleTwo/background/PYRO.png') + return Image.open(f'{path}/teapmleTwo/background/PYRO.png').convert("RGBA") elif element== "Grass": - return Image.open(f'{path}/teapmleTwo/background/DENDRO.png') + return Image.open(f'{path}/teapmleTwo/background/DENDRO.png').convert("RGBA") elif element == "Electric": - return Image.open(f'{path}/teapmleTwo/background/ELECTRO.png') + return Image.open(f'{path}/teapmleTwo/background/ELECTRO.png').convert("RGBA") elif element == "Water": - return Image.open(f'{path}/teapmleTwo/background/GYDRO.png') + return Image.open(f'{path}/teapmleTwo/background/GYDRO.png').convert("RGBA") elif element == "Wind": - return Image.open(f'{path}/teapmleTwo/background/ANEMO.png') + return Image.open(f'{path}/teapmleTwo/background/ANEMO.png').convert("RGBA") elif element== "Rock": - return Image.open(f'{path}/teapmleTwo/background/GEO.png') + return Image.open(f'{path}/teapmleTwo/background/GEO.png').convert("RGBA") elif element == "Ice": - return Image.open(f'{path}/teapmleTwo/background/CRYO.png') + return Image.open(f'{path}/teapmleTwo/background/CRYO.png').convert("RGBA") else: - return Image.open(f'{path}/teapmleTwo/background/ERROR.png') + return Image.open(f'{path}/teapmleTwo/background/ERROR.png').convert("RGBA") else: if element == "Fire": - return Image.open(f'{path}/teapmleTree/background/PYRO.png') + return Image.open(f'{path}/teapmleTree/background/PYRO.png').convert("RGBA") elif element== "Grass": - return Image.open(f'{path}/teapmleTree/background/DENDRO.png') + return Image.open(f'{path}/teapmleTree/background/DENDRO.png').convert("RGBA") elif element == "Electric": - return Image.open(f'{path}/teapmleTree/background/ELECTRO.png') + return Image.open(f'{path}/teapmleTree/background/ELECTRO.png').convert("RGBA") elif element == "Water": - return Image.open(f'{path}/teapmleTree/background/GYDRO.png') + return Image.open(f'{path}/teapmleTree/background/GYDRO.png').convert("RGBA") elif element == "Wind": - return Image.open(f'{path}/teapmleTree/background/ANEMO.png') + return Image.open(f'{path}/teapmleTree/background/ANEMO.png').convert("RGBA") elif element== "Rock": - return Image.open(f'{path}/teapmleTree/background/GEO.png') + return Image.open(f'{path}/teapmleTree/background/GEO.png').convert("RGBA") elif element == "Ice": - return Image.open(f'{path}/teapmleTree/background/CRYO.png') + return Image.open(f'{path}/teapmleTree/background/CRYO.png').convert("RGBA") else: - return Image.open(f'{path}/teapmleTree/background/ERROR.png') + return Image.open(f'{path}/teapmleTree/background/ERROR.png').convert("RGBA") def openImageElementConstant(element, teampt = 1): if teampt in [1,2]: @@ -142,26 +173,27 @@ def openImageElementConstant(element, teampt = 1): def maskaAdd(element,charter, teample = 1): + charter = charter.convert("RGBA") if teample == 1: bg = openImageElement(element) bgUP = bg.copy() - bg.paste(charter,(-734,-134),charter) + bg.alpha_composite(charter,(-734,-134)) im = Image.composite(bg, bgUP, openFile.MaskaBgTeampleOne.convert('L')) - bg.paste(im,(0,0)) + bg.alpha_composite(im,(0,0)) elif teample == 2: bg = openImageElement(element, teample = 2) bgUP = bg.copy() - bg.paste(charter,(0,0),charter) + bg.alpha_composite(charter,(0,0)) im = Image.composite(bg, bgUP, openFile.MaskaSplas.convert('L').resize(bg.size)) - bg.paste(im,(0,0)) - bg.paste(openFile.MasskaEffectDown,(0,0),openFile.MasskaEffectDown) + bg.alpha_composite(im,(0,0)) + bg.alpha_composite(openFile.MasskaEffectDown,(0,0)) else: bg = openImageElement(element, teample = 3) bgUP = bg.copy() - bg.paste(charter,(-810,-115),charter) + bg.alpha_composite(charter,(-810,-115)) im = Image.composite(bg, bgUP, openFile.UserBgTeampleTree.convert('L')) - bg.paste(im,(0,0)) - bg.paste(openFile.EffectBgTeampleTree,(0,0),openFile.EffectBgTeampleTree) + bg.alpha_composite(im,(0,0)) + bg.alpha_composite(openFile.EffectBgTeampleTree,(0,0)) return bg @@ -169,10 +201,10 @@ def userImage(img,element = None, adaptation = False): userImagess,pozitionX = centryImage(img) if adaptation: grandient = userAdaptGrandient(userImagess.convert("RGB").copy()) - Effect = openFile.UserEffectTeampleOne.copy() + Effect = openFile.UserEffectTeampleOne.copy().convert('RGBA') grandient = ImageChops.screen(grandient,Effect) - Effect.paste(userImagess,(pozitionX,0),userImagess) - im = Image.composite(Effect, grandient, openFile.MaskaUserBg2TeampleOne) + Effect.alpha_composite(userImagess,(pozitionX,0)) + im = Image.composite(Effect, grandient, openFile.MaskaUserBg2TeampleOne.convert("L")) return im else: try: @@ -181,28 +213,28 @@ def userImage(img,element = None, adaptation = False): except Exception as e: print(e) - bg.paste(userImagess,(pozitionX,0)) - im = Image.composite(bg, effect, openFile.MaskaUserBg2TeampleOne) - bg.paste(im,(0,0)) + bg.alpha_composite(userImagess,(pozitionX,0)) + im = Image.composite(bg, effect, openFile.MaskaUserBg2TeampleOne.convert("L")) + bg.alpha_composite(im,(0,0)) return bg def userImageTree(img,element = None, adaptation = False): userImagess,pozitionX = centryImage(img, teample = 3) if adaptation: grandient = userAdaptGrandient(userImagess.convert("RGB").copy(), size =(1924,802)) - Effect = openFile.EffectBgTree.copy() + Effect = openFile.EffectBgTree.copy().convert("RGBA") grandient = ImageChops.screen(grandient,Effect) - Effect.paste(userImagess,(pozitionX,0),userImagess) - im = Image.composite(Effect, grandient, openFile.UserBgTeampleImgTree) - im.paste(openFile.EffectBgTeampleTree,(0,0),openFile.EffectBgTeampleTree) + Effect.alpha_composite(userImagess,(pozitionX,0)) + im = Image.composite(Effect, grandient, openFile.UserBgTeampleImgTree.convert("L")) + im.alpha_composite(openFile.EffectBgTeampleTree,(0,0)) return im else: bg = openImageElement(element, teample = 3) effect = bg.copy() - bg.paste(userImagess,(pozitionX,0),userImagess) - im = Image.composite(bg, effect, openFile.UserBgTeampleImgTree) - bg.paste(im,(0,0)) - bg.paste(openFile.EffectBgTeampleTree,(0,0),openFile.EffectBgTeampleTree) + bg.alpha_composite(userImagess,(pozitionX,0)) + im = Image.composite(bg, effect, openFile.UserBgTeampleImgTree.convert("L")) + bg.alpha_composite(im,(0,0)) + bg.alpha_composite(openFile.EffectBgTeampleTree.convert("RGBA"),(0,0)) return bg @@ -212,19 +244,19 @@ def userImageTwo(img,element = None, adaptation = False): bg = openImageElement("error", teample = 2) grandientLeft = userAdaptGrandient(userImagess.convert("RGB").copy(), size = (1038, 1048),left = True) grandientRight = userAdaptGrandient(userImagess.convert("RGB").copy(), size = (937, 1048)) - bg.paste(grandientLeft,(0,0),grandientLeft) - bg.paste(grandientRight,(grandientLeft.size[0],0),grandientRight) + bg.alpha_composite(grandientLeft,(0,0)) + bg.alpha_composite(grandientRight,(grandientLeft.size[0],0)) Effect = openFile.UserEffectTeampleTwo.copy() grandient = ImageChops.screen(bg,Effect) - Effect.paste(userImagess,(pozitionX,0),userImagess) - im = Image.composite(Effect, grandient, openFile.UserBgTeampleTwo) + Effect.alpha_composite(userImagess,(pozitionX,0)) + im = Image.composite(Effect, grandient, openFile.UserBgTeampleTwo.convert("L")) return im else: bg = openImageElement(element, teample = 2) effect = bg.copy() - bg.paste(userImagess,(pozitionX,0),userImagess) - im = Image.composite(bg, effect, openFile.UserBgTeampleTwo) - bg.paste(im,(0,0)) + bg.alpha_composite(userImagess,(pozitionX,0)) + im = Image.composite(bg, effect, openFile.UserBgTeampleTwo.convert("L")) + bg.alpha_composite(im,(0,0)) return bg ''' @@ -322,6 +354,8 @@ def getIconAdd(x, icon = False, size = None): icons = Image.open(f'{path}/icon/HEALED_ADD.png') elif x == "FIGHT_PROP_HEAL": icons = Image.open(f'{path}/icon/HEAL.png') + elif x == "FIGHT_PROP_PHYSICAL_ADD_HURT": + icons = Image.open(f'{path}/icon/PHYSICAL_ADD_HURT.png') else: return False if size: diff --git a/enkanetworkcard/src/utils/gradient.py b/enkanetworkcard/src/utils/gradient.py index e747b00..301912d 100644 --- a/enkanetworkcard/src/utils/gradient.py +++ b/enkanetworkcard/src/utils/gradient.py @@ -39,7 +39,7 @@ def vertGradient(image, rect, color_func, color_palette): draw.line([(rect.min.x, y), (rect.max.x, y)], fill=color) -def userAdaptGrandient(userImg, size = (1503, 788), left = False): +def userAdaptGrandient(userImg, size = (1502, 787), left = False): if left: userImg = userImg.crop((0,0,userImg.size[0]+3-userImg.size[0],userImg.size[1])) else: diff --git a/enkanetworkcard/src/utils/openFile.py b/enkanetworkcard/src/utils/openFile.py index 382e343..6f62768 100644 --- a/enkanetworkcard/src/utils/openFile.py +++ b/enkanetworkcard/src/utils/openFile.py @@ -1,10 +1,10 @@ - +# Copyright 2022 DEViantUa +# All rights reserved. from PIL import Image -from PIL import UnidentifiedImageError import threading from weakref import WeakValueDictionary from pathlib import Path -import httpx + lock = threading.Lock() cache = WeakValueDictionary() assets = Path(__file__).parent.parent / 'assets' @@ -16,6 +16,8 @@ #=================Artifact================== mapping = { + 'PlayerGirl': assets/'PlayerGirl.png', + 'MaskaInfoUser': assets/'InfoCharter'/'AvatarMaska.png', 'EffectBgTeampleTree': assets/'teapmleTree'/'background'/'EFFECT_DARK.png', @@ -168,17 +170,6 @@ } -def dowload(path,ret = False): - with open(path, 'wb') as file: - with httpx.stream('GET', f"https://raw.githubusercontent.com/DEViantUA/EnkaNetworkCardAsset/main/data/2.0.8/assets/{path.relative_to(assets).as_posix()}") as response: - response.raise_for_status() - - for data in response.iter_bytes(): - file.write(data) - if ret: - return Image.open(path) - else: - return None def __dir__(): return sorted(set([*globals(), *mapping])) @@ -187,16 +178,11 @@ def __getattr__(name): path = mapping[name] except KeyError: raise AttributeError(name) from None + with lock: try: image = cache[name] except KeyError: - if not path.is_file(): - path.parent.mkdir(parents=True, exist_ok=True) - dowload(path) - try: - cache[name] = image = Image.open(path) - except UnidentifiedImageError: - cache[name] = image = dowload(path,ret = True) + cache[name] = image = Image.open(path) return image diff --git a/enkanetworkcard/src/utils/options.py b/enkanetworkcard/src/utils/options.py index 44691d2..0e8525f 100644 --- a/enkanetworkcard/src/utils/options.py +++ b/enkanetworkcard/src/utils/options.py @@ -16,5 +16,5 @@ def fontSize(t): #t12 = ImageFont.truetype(font, 12) fontSize(12) stat_perc = {3, 6, 9, 11, 12, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 3002, 3004, 3005, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3024} -IconAddTrue = ["FIGHT_PROP_HEAL_ADD","FIGHT_PROP_GRASS_ADD_HURT","FIGHT_PROP_FIRE_ADD_HURT","FIGHT_PROP_MAX_HP","FIGHT_PROP_CUR_ATTACK","FIGHT_PROP_CUR_DEFENSE","FIGHT_PROP_ELEMENT_MASTERY","FIGHT_PROP_CRITICAL","FIGHT_PROP_CRITICAL_HURT","FIGHT_PROP_CHARGE_EFFICIENCY","FIGHT_PROP_ELEC_ADD_HURT","FIGHT_PROP_ROCK_ADD_HURT","FIGHT_PROP_ICE_ADD_HURT","FIGHT_PROP_WIND_ADD_HURT","FIGHT_PROP_WATER_ADD_HURT"] +IconAddTrue = ["FIGHT_PROP_PHYSICAL_ADD_HURT","FIGHT_PROP_HEAL_ADD","FIGHT_PROP_GRASS_ADD_HURT","FIGHT_PROP_FIRE_ADD_HURT","FIGHT_PROP_MAX_HP","FIGHT_PROP_CUR_ATTACK","FIGHT_PROP_CUR_DEFENSE","FIGHT_PROP_ELEMENT_MASTERY","FIGHT_PROP_CRITICAL","FIGHT_PROP_CRITICAL_HURT","FIGHT_PROP_CHARGE_EFFICIENCY","FIGHT_PROP_ELEC_ADD_HURT","FIGHT_PROP_ROCK_ADD_HURT","FIGHT_PROP_ICE_ADD_HURT","FIGHT_PROP_WIND_ADD_HURT","FIGHT_PROP_WATER_ADD_HURT"] dopStatAtribute = {"FIGHT_PROP_MAX_HP": "BASE_HP", "FIGHT_PROP_CUR_ATTACK":"FIGHT_PROP_BASE_ATTACK","FIGHT_PROP_CUR_DEFENSE":"FIGHT_PROP_BASE_DEFENSE"} \ No newline at end of file diff --git a/enkanetworkcard/src/utils/userProfile.py b/enkanetworkcard/src/utils/userProfile.py index 6bdea2c..161af69 100644 --- a/enkanetworkcard/src/utils/userProfile.py +++ b/enkanetworkcard/src/utils/userProfile.py @@ -14,7 +14,7 @@ async def characters(player,assets,image): for key in player: person = assets.character(key.id) if not key.name in charterList: - charterList[key.name] = {"rarity": person.rarity, "image": key.icon.url, "element": person.element.value} + charterList[key.name] = {"rarity": person.rarity, "image": key.icon.url, "element": key.element.value, "id": key.id} charactersArg += f"{key.name}," if image: if person.rarity == 4: @@ -35,7 +35,6 @@ async def characters(player,assets,image): async def creatUserProfile(image,player,lang,hide,uid,assets): t12 = ImageFont.truetype(openFile.font, 12) t17 = ImageFont.truetype(openFile.font, 17) - Avatar = Image.open(f'{path}/InfoCharter/AvatarUser.png') Background = Image.open(f'{path}/InfoCharter/bg.png') UserName = Image.open(f'{path}/InfoCharter/UserName.png') @@ -43,7 +42,11 @@ async def creatUserProfile(image,player,lang,hide,uid,assets): Bg = None charactersListImage,charactersList,charactersArg = await characters(player.characters_preview,assets,image) if image: - bannerUserNamecard = await imagSize(link = player.namecard.navbar.url, size = (661,105)) + if player.namecard.navbar.url == "https://enka.network/ui/.png": + ibanner = Image.open(f'{path}/InfoCharter/DEFAULT.png') + bannerUserNamecard = await imagSize(image = ibanner, size = (661,105)) + else: + bannerUserNamecard = await imagSize(link = player.namecard.navbar.url, size = (661,105)) Background.paste(bannerUserNamecard,(123 ,145),bannerUserNamecard) picturesProfile = await imagSize(link = player.avatar.icon.url,fixed_width = 179) picturesProfile = picturesProfile.convert('RGBA')