conquest_develop
bobloy 3 years ago
parent 8acca64264
commit 6762d3cbde

@ -4,7 +4,7 @@ import logging
import pathlib
import shutil
from io import BytesIO
from typing import List, Union
from typing import List, Union, Optional
from PIL import Image, ImageChops, ImageColor, ImageDraw, ImageFont, ImageOps
from PIL.ImageDraw import _color_diff
@ -12,6 +12,9 @@ from PIL.ImageDraw import _color_diff
log = logging.getLogger("red.fox_v3.conquest.regioner")
MAP_FONT: Optional[ImageFont.ImageFont] = None
async def composite_regions(im, regions, color, masks_path) -> Union[Image.Image, None]:
im2 = Image.new("RGB", im.size, color)
@ -115,19 +118,31 @@ def create_number_mask(regions, filepath, filename):
if not base_img_path.exists():
return False
base_img: Image.Image = Image.open(base_img_path).convert("L")
base_img: Image.Image = Image.open(base_img_path)
number_img = Image.new("L", base_img.size, 255)
fnt = ImageFont.load_default()
background_img = Image.new("L", base_img.size, 255)
number2_img = Image.new("L", base_img.size, 255)
if MAP_FONT is None:
fnt = ImageFont.load_default()
else:
fnt = MAP_FONT
d = ImageDraw.Draw(number_img)
d2 = ImageDraw.Draw(background_img)
d3 = ImageDraw.Draw(number2_img)
for region_num, region in regions.items():
text = getattr(region, "name", str(region_num))
w1, h1 = region.center
w2, h2 = fnt.getsize(text)
d2.rectangle((w1 - (w2 / 2), h1 - (h2 / 2)-1, w1 + (w2 / 2)-1, h1 + (h2 / 2)), fill=0)
d3.rectangle((w1 - (w2 / 2), h1 - (h2 / 2)-1, w1 + (w2 / 2)-1, h1 + (h2 / 2)), fill=0)
d3.text((w1 - (w2 / 2), h1 - (h2 / 2)), text, font=fnt, fill=255)
d.text((w1 - (w2 / 2), h1 - (h2 / 2)), text, font=fnt, fill=0)
number_img.save(filepath / f"numbers.png", "PNG")
number_img.save(filepath / "numbers.png", "PNG")
background_img.save(filepath / "numbers_background.png", "PNG")
number2_img.save(filepath / "numbers2.png", "PNG")
return True
@ -155,6 +170,12 @@ class ConquestMap:
def numbered_path(self):
return self.path / "numbered.png"
def numbers_background_path(self):
return self.path / "numbers_background.png"
def numbers2_path(self):
return self.path / "numbers2.png"
def load_data(self):
with self.data_path().open() as dp:
data = json.load(dp)
@ -208,7 +229,6 @@ class ConquestMap:
masks_dir = self.masks_path()
if masks_dir.exists() and masks_dir.is_dir():
loop = asyncio.get_running_loop()
current_map = Image.open(self.blank_path())
if region is not None:
@ -264,6 +284,11 @@ class ConquestMap:
return buffer1
async def get_numbered(self, current_map):
# return await self.get_inverted_numbered(current_map)
return await self.get_numbered_with_background(current_map)
async def get_inverted_numbered(self, current_map):
loop = asyncio.get_running_loop()
numbers = Image.open(self.numbers_path()).convert("L")
inverted_map = ImageOps.invert(current_map)
@ -272,6 +297,23 @@ class ConquestMap:
)
return current_numbered_img
async def get_numbered_with_background(self, current_map):
loop = asyncio.get_running_loop()
current_map = current_map.convert("RGBA")
# numbers = Image.open(self.numbers_path()).convert("L")
numbers_mask = Image.open(self.numbers_background_path()).convert("L")
numbers_background = Image.open(self.numbers2_path()).convert("RGB")
# inverted_map = ImageOps.invert(current_map)
# current_numbered_img = await loop.run_in_executor(
# None, Image.composite, current_map, inverted_map, numbers
# )
current_numbered_img = await loop.run_in_executor(
None, Image.composite, current_map, numbers_background, numbers_mask
)
return current_numbered_img
class MapMaker(ConquestMap):
async def change_name(self, new_name: str, new_path: pathlib.Path):

Loading…
Cancel
Save