This commit is contained in:
baiqwerdvd 2024-12-24 16:37:47 +08:00
parent e6ef06694d
commit c536e20b69
No known key found for this signature in database
GPG Key ID: 7717E46E1797411A

View File

@ -16,7 +16,7 @@ async def get_ann_img(data: BulletinData) -> str | bytes:
match data.displayType: match data.displayType:
case 1: case 1:
soup = BeautifulSoup(data.content, "lxml") soup = BeautifulSoup(data.content, "lxml")
img = await soup_to_img(data.header, soup) img = await soup_to_img(data.header, soup, data.bannerImageUrl)
return img return img
case 2: case 2:
img = await download_pic_to_image(data.bannerImageUrl) img = await download_pic_to_image(data.bannerImageUrl)
@ -94,33 +94,54 @@ async def process_tag(
return point, elements return point, elements
async def soup_to_img(header: str, soup: BeautifulSoup) -> str | bytes: async def soup_to_img(header: str, soup: BeautifulSoup, bannerImageUrl: str) -> str | bytes:
elements = [] banner_img = None
point = 105 banner_img_new_h = 0
div = get_div() header_img = None
header_img_new_h = 0
logger.info("[GsCore] 开始解析帖子内容...") if bannerImageUrl != "":
for tag in soup.descendants: banner_img = await download_pic_to_image(bannerImageUrl)
point, elements = await process_tag( banner_img_new_h = int((930 / banner_img.size[0]) * banner_img.size[1])
elements, banner_img = banner_img.resize((930, banner_img_new_h))
point,
tag, # type: ignore
)
logger.info("[GsCore] 帖子解析完成!进入图片处理流程...")
img = Image.new("RGB", (1000, point), (255, 255, 255))
draw = ImageDraw.Draw(img)
if header != "": if header != "":
header_img = "https://ak.hycdn.cn/announce/assets/images/announcement/header.jpg" header_img = "https://ak.hycdn.cn/announce/assets/images/announcement/header.jpg"
header_img = await download_pic_to_image(header_img) header_img = await download_pic_to_image(header_img)
new_h = int((930 / header_img.size[0]) * header_img.size[1]) header_img_new_h = int((930 / header_img.size[0]) * header_img.size[1])
header_img = header_img.resize((930, new_h)) header_img = header_img.resize((930, header_img_new_h))
img.paste(header_img, (35, 35)) elements = []
if banner_img:
point = 105 + banner_img_new_h + 15
init_point = 105 + banner_img_new_h + 15
else:
point = 105
init_point = 105
div = get_div()
print("[GsCore] 开始解析帖子内容...")
for tag in soup.descendants:
point, elements = await process_tag(
elements,
point,
init_point,
tag, # type: ignore
)
print("[GsCore] 帖子解析完成!进入图片处理流程...")
img = Image.new("RGB", (1000, point), (255, 255, 255))
draw = ImageDraw.Draw(img)
if banner_img:
img.paste(banner_img, (35, 35))
if header_img:
pad = 50 + banner_img_new_h if banner_img else 35
img.paste(header_img, (35, pad))
draw.text( draw.text(
(45, 42), (45, 7 + pad),
header, header,
font=cf(30), font=cf(30),
fill=(255, 255, 255), fill=(255, 255, 255),