mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-10-21 16:27:15 +08:00
新增日历表头时间,修改模版布局
This commit is contained in:
parent
e78a9215c1
commit
49a44124d7
@ -1,96 +0,0 @@
|
|||||||
from PIL import Image, ImageDraw, ImageFont
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
res_path = Path(__file__).parent.parent / 'res'
|
|
||||||
font = ImageFont.truetype(str(res_path / 'wqy-microhei.ttc'), 20)
|
|
||||||
|
|
||||||
width = 500
|
|
||||||
|
|
||||||
color = [
|
|
||||||
{'front': 'black', 'back': 'white'},
|
|
||||||
{'front': 'white', 'back': 'ForestGreen'},
|
|
||||||
{'front': 'white', 'back': 'DarkOrange'},
|
|
||||||
{'front': 'white', 'back': 'BlueViolet'},
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def create_image(item_number):
|
|
||||||
height = item_number * 30
|
|
||||||
im = Image.new('RGBA', (width, height), (255, 255, 255, 0))
|
|
||||||
return im
|
|
||||||
|
|
||||||
|
|
||||||
def draw_rec(im, color, x, y, w, h, r):
|
|
||||||
draw = ImageDraw.Draw(im)
|
|
||||||
draw.rectangle((x+r, y, x+w-r, y+h), fill=color)
|
|
||||||
draw.rectangle((x, y+r, x+w, y+h-r), fill=color)
|
|
||||||
r = r * 2
|
|
||||||
draw.ellipse((x, y, x+r, y+r), fill=color)
|
|
||||||
draw.ellipse((x+w-r, y, x+w, y+r), fill=color)
|
|
||||||
draw.ellipse((x, y+h-r, x+r, y+h), fill=color)
|
|
||||||
draw.ellipse((x+w-r, y+h-r, x+w, y+h), fill=color)
|
|
||||||
|
|
||||||
|
|
||||||
def draw_text(im, x, y, w, h, text, align, color):
|
|
||||||
draw = ImageDraw.Draw(im)
|
|
||||||
tw, th = draw.textsize(text, font=font)
|
|
||||||
y = y + (h - th) / 2
|
|
||||||
if align == 0: # 居中
|
|
||||||
x = x + (w - tw) / 2
|
|
||||||
elif align == 1: # 左对齐
|
|
||||||
x = x + 5
|
|
||||||
elif align == 2: # 右对齐
|
|
||||||
x = x + w - tw - 5
|
|
||||||
draw.text((x, y), text, fill=color, font=font)
|
|
||||||
|
|
||||||
|
|
||||||
def draw_item(im, n, t, text, days, forever):
|
|
||||||
if t >= len(color):
|
|
||||||
t = 1
|
|
||||||
x = 0
|
|
||||||
y = n * 30
|
|
||||||
height = 28
|
|
||||||
|
|
||||||
draw_rec(im, color[t]['back'], x, y, width, height, 6)
|
|
||||||
|
|
||||||
im1 = Image.new('RGBA', (width - 120, 28), (255, 255, 255, 0))
|
|
||||||
draw_text(im1, 0, 0, width, height, text, 1, color[t]['front'])
|
|
||||||
_, _, _, a = im1.split()
|
|
||||||
im.paste(im1, (x, y), mask=a)
|
|
||||||
|
|
||||||
if days > 0:
|
|
||||||
if forever:
|
|
||||||
text1 = '永久开放'
|
|
||||||
else:
|
|
||||||
text1 = f'{days}天后结束'
|
|
||||||
elif days < 0:
|
|
||||||
text1 = f'{-days}天后开始'
|
|
||||||
else:
|
|
||||||
text1 = '即将结束'
|
|
||||||
draw_text(im, x, y, width, height, text1, 2, color[t]['front'])
|
|
||||||
|
|
||||||
|
|
||||||
def draw_title(im, n, left=None, middle=None, right=None):
|
|
||||||
x = 0
|
|
||||||
y = n * 30
|
|
||||||
height = 28
|
|
||||||
|
|
||||||
draw_rec(im, color[0]['back'], x, y, width, height, 6)
|
|
||||||
if middle:
|
|
||||||
draw_text(im, x, y, width, height, middle, 0, color[0]['front'])
|
|
||||||
if left:
|
|
||||||
draw_text(im, x, y, width, height, left, 1, color[0]['front'])
|
|
||||||
if right:
|
|
||||||
draw_text(im, x, y, width, height, right, 2, color[0]['front'])
|
|
||||||
|
|
||||||
|
|
||||||
def draw_title1(im, n, day_list):
|
|
||||||
x = 0
|
|
||||||
y = n * 30
|
|
||||||
height = 28
|
|
||||||
color = 'black'
|
|
||||||
|
|
||||||
n = len(day_list)
|
|
||||||
for i in range(n):
|
|
||||||
x = width / n * i
|
|
||||||
draw_text(im, x, y, width, height, day_list[i], 1, color)
|
|
@ -1,13 +1,14 @@
|
|||||||
|
import jinja2
|
||||||
from nonebot import require
|
from nonebot import require
|
||||||
|
|
||||||
require("nonebot_plugin_htmlrender")
|
require("nonebot_plugin_htmlrender")
|
||||||
from nonebot_plugin_htmlrender import html_to_pic
|
from nonebot_plugin_htmlrender import html_to_pic
|
||||||
import jinja2
|
|
||||||
|
|
||||||
from .event import *
|
from .event import *
|
||||||
from .draw import *
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
|
||||||
body = []
|
body = []
|
||||||
|
weeks = []
|
||||||
|
weekList = ['一', '二', '三', '四', '五', '六', '日']
|
||||||
template_path = Path(__file__).parent / 'template'
|
template_path = Path(__file__).parent / 'template'
|
||||||
env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path), enable_async=True)
|
env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path), enable_async=True)
|
||||||
|
|
||||||
@ -15,8 +16,24 @@ env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path), enable_a
|
|||||||
async def generate_day_schedule(server='cn'):
|
async def generate_day_schedule(server='cn'):
|
||||||
events = await get_events(server, 0, 15)
|
events = await get_events(server, 0, 15)
|
||||||
has_prediction = False
|
has_prediction = False
|
||||||
""" 追加数据前先执行清除,以防数据叠加 """
|
|
||||||
body.clear()
|
body.clear()
|
||||||
|
weeks.clear()
|
||||||
|
t = datetime.now()
|
||||||
|
|
||||||
|
for i in range(7):
|
||||||
|
d2 = (t + timedelta(days=i)).strftime("%Y-%m-%d")
|
||||||
|
""" 分割 [年|月|日]"""
|
||||||
|
date_full = str(d2).split("-")
|
||||||
|
|
||||||
|
current = 'm-events-calendar__table-header-current' if t.strftime("%d") == date_full[2] else ""
|
||||||
|
date = re.search(r'0\d+', date_full[1]).group(0).replace('0', '') if re.search(r'0\d+', date_full[1]) else date_full[1]
|
||||||
|
|
||||||
|
week = datetime(int(date_full[0]), int(date_full[1]), int(date_full[2])).isoweekday()
|
||||||
|
weeks.append({
|
||||||
|
'week': f'星期{weekList[week - 1]}',
|
||||||
|
'date': f'{date}.{date_full[2]}',
|
||||||
|
'current': current
|
||||||
|
})
|
||||||
|
|
||||||
for event in events:
|
for event in events:
|
||||||
if event['start_days'] > 0:
|
if event['start_days'] > 0:
|
||||||
@ -45,5 +62,5 @@ async def generate_day_schedule(server='cn'):
|
|||||||
'banner': event['banner']
|
'banner': event['banner']
|
||||||
})
|
})
|
||||||
|
|
||||||
content = await template.render_async(body=body, css_path=template_path)
|
content = await template.render_async(body=body, css_path=template_path, week=weeks)
|
||||||
return await html_to_pic(content, wait=0, viewport={"width": 600, "height": 100})
|
return await html_to_pic(content, wait=0, viewport={"width": 600, "height": 10})
|
||||||
|
@ -6,16 +6,33 @@
|
|||||||
<title>原神日历</title>
|
<title>原神日历</title>
|
||||||
<link rel="stylesheet" href="{{ css_path }}/iview.css" />
|
<link rel="stylesheet" href="{{ css_path }}/iview.css" />
|
||||||
<link rel="stylesheet" href="{{ css_path }}/index.css" />
|
<link rel="stylesheet" href="{{ css_path }}/index.css" />
|
||||||
|
<link rel="stylesheet" href="{{ css_path }}/normalize.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="calendar-wapper">
|
<div class="calendar-wapper">
|
||||||
<div class="m-events-calendar">
|
<div class="m-events-calendar">
|
||||||
<div class="m-events-calendar">
|
<div class="m-events-calendar">
|
||||||
<div class="m-events-calenda__m-right">
|
<div class="m-events-calenda__m-right">
|
||||||
|
<div class="m-events-calendar__line-container">
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
<div class="m-events-calendar__line-item"></div>
|
||||||
|
</div>
|
||||||
|
<div class="m-events-calendar__table-header">
|
||||||
|
{% for weeks in week %}
|
||||||
|
<div class="m-events-calendar__table-header-item {{ weeks.current }}">
|
||||||
|
<div class="m-events-calendar__table-header-week">{{ weeks.week }}</div>
|
||||||
|
<div class="m-events-calendar__table-header-date">{{ weeks.date }}</div>
|
||||||
|
</div>
|
||||||
|
{% endfor%}
|
||||||
|
</div>
|
||||||
{% for item in body %}
|
{% for item in body %}
|
||||||
<div class="m-events-calendar__event-item-container" style="width: 535px; transform: translate(0px);">
|
<div class="m-events-calendar__event-item-container" style="width: 544px; transform: translate(0px);">
|
||||||
<div class="m-events-calendar__event-item-bg" style="background-image: url('{{ item.banner }}');">
|
<div class="m-events-calendar__event-item-bg" style="background-image: url('{{ item.banner }}');">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -35,6 +52,7 @@
|
|||||||
{% endfor%}
|
{% endfor%}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="text">All Rights Reserved.@NepPure<br>Create By @nicklly for LittlePaimon</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
@import url("normalize.css");
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "FFXIV-EN";
|
font-family: "FFXIV-EN";
|
||||||
src: url("~/assets/font/EORZEA.TTF") format("truetype");
|
src: url("~/assets/font/EORZEA.TTF") format("truetype");
|
||||||
|
310
Paimon_Calendar/template/normalize.css
vendored
Normal file
310
Paimon_Calendar/template/normalize.css
vendored
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
||||||
|
/* Document
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* 1. Correct the line height in all browsers.
|
||||||
|
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
||||||
|
*/
|
||||||
|
html {
|
||||||
|
line-height: 1.15;
|
||||||
|
/* 1 */
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
/* 2 */
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Source Sans Pro,
|
||||||
|
Helvetica Neue, Arial, PingFang SC, Microsoft YaHei, sans-serif,
|
||||||
|
Apple Color Emoji, Segoe UI Emoji;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
/* Sections
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* Remove the margin in all browsers.
|
||||||
|
*/
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Render the `main` element consistently in IE.
|
||||||
|
*/
|
||||||
|
main {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Correct the font size and margin on `h1` elements within `section` and
|
||||||
|
* `article` contexts in Chrome, Firefox, and Safari.
|
||||||
|
*/
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* 1. Add the correct box sizing in Firefox.
|
||||||
|
* 2. Show the overflow in Edge and IE.
|
||||||
|
*/
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
/* 1 */
|
||||||
|
height: 0;
|
||||||
|
/* 1 */
|
||||||
|
overflow: visible;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||||
|
* 2. Correct the odd `em` font sizing in all browsers.
|
||||||
|
*/
|
||||||
|
pre {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
/* 1 */
|
||||||
|
font-size: 1em;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* Remove the gray background on active links in IE 10.
|
||||||
|
*/
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Remove the bottom border in Chrome 57-
|
||||||
|
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||||
|
*/
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: none;
|
||||||
|
/* 1 */
|
||||||
|
text-decoration: underline;
|
||||||
|
/* 2 */
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||||
|
*/
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||||
|
* 2. Correct the odd `em` font sizing in all browsers.
|
||||||
|
*/
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
/* 1 */
|
||||||
|
font-size: 1em;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Add the correct font size in all browsers.
|
||||||
|
*/
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||||
|
* all browsers.
|
||||||
|
*/
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* Remove the border on images inside links in IE 10.
|
||||||
|
*/
|
||||||
|
img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* 1. Change the font styles in all browsers.
|
||||||
|
* 2. Remove the margin in Firefox and Safari.
|
||||||
|
*/
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: inherit;
|
||||||
|
/* 1 */
|
||||||
|
font-size: 100%;
|
||||||
|
/* 1 */
|
||||||
|
line-height: 1.15;
|
||||||
|
/* 1 */
|
||||||
|
margin: 0;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Show the overflow in IE.
|
||||||
|
* 1. Show the overflow in Edge.
|
||||||
|
*/
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
/* 1 */
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||||
|
* 1. Remove the inheritance of text transform in Firefox.
|
||||||
|
*/
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
/* 1 */
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Correct the inability to style clickable types in iOS and Safari.
|
||||||
|
*/
|
||||||
|
button,
|
||||||
|
[type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Remove the inner border and padding in Firefox.
|
||||||
|
*/
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
border-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Restore the focus styles unset by the previous rule.
|
||||||
|
*/
|
||||||
|
button:-moz-focusring,
|
||||||
|
[type="button"]:-moz-focusring,
|
||||||
|
[type="reset"]:-moz-focusring,
|
||||||
|
[type="submit"]:-moz-focusring {
|
||||||
|
outline: 1px dotted ButtonText;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Correct the padding in Firefox.
|
||||||
|
*/
|
||||||
|
fieldset {
|
||||||
|
padding: 0.35em 0.75em 0.625em;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Correct the text wrapping in Edge and IE.
|
||||||
|
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||||
|
* 3. Remove the padding so developers are not caught out when they zero out
|
||||||
|
* `fieldset` elements in all browsers.
|
||||||
|
*/
|
||||||
|
legend {
|
||||||
|
box-sizing: border-box;
|
||||||
|
/* 1 */
|
||||||
|
color: inherit;
|
||||||
|
/* 2 */
|
||||||
|
display: table;
|
||||||
|
/* 1 */
|
||||||
|
max-width: 100%;
|
||||||
|
/* 1 */
|
||||||
|
padding: 0;
|
||||||
|
/* 3 */
|
||||||
|
white-space: normal;
|
||||||
|
/* 1 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Remove the default vertical scrollbar in IE 10+.
|
||||||
|
*/
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Add the correct box sizing in IE 10.
|
||||||
|
* 2. Remove the padding in IE 10.
|
||||||
|
*/
|
||||||
|
[type="checkbox"],
|
||||||
|
[type="radio"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
/* 1 */
|
||||||
|
padding: 0;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||||
|
*/
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Correct the odd appearance in Chrome and Safari.
|
||||||
|
* 2. Correct the outline style in Safari.
|
||||||
|
*/
|
||||||
|
[type="search"] {
|
||||||
|
-webkit-appearance: textfield;
|
||||||
|
/* 1 */
|
||||||
|
outline-offset: -2px;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Remove the inner padding in Chrome and Safari on macOS.
|
||||||
|
*/
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||||
|
* 2. Change font properties to `inherit` in Safari.
|
||||||
|
*/
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
/* 1 */
|
||||||
|
font: inherit;
|
||||||
|
/* 2 */
|
||||||
|
}
|
||||||
|
/* Interactive
|
||||||
|
========================================================================== */
|
||||||
|
/*
|
||||||
|
* Add the correct display in Edge, IE 10+, and Firefox.
|
||||||
|
*/
|
||||||
|
details {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Add the correct display in all browsers.
|
||||||
|
*/
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
}
|
||||||
|
/* Misc
|
||||||
|
========================================================================== */
|
||||||
|
/**
|
||||||
|
* Add the correct display in IE 10+.
|
||||||
|
*/
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Add the correct display in IE 10.
|
||||||
|
*/
|
||||||
|
[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user