Initial Commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"""用真实渲染结果判"会不会被圆屏切掉"。
|
||||
|
||||
做法:渲染一张**不套圆形遮罩**的 RGBA,然后量所有非透明像素到圆心的距离。
|
||||
这样自动考虑字体实际字宽、折行、圆角、图片缩放 —— 比按元素外框估算准得多。
|
||||
"""
|
||||
import os, sys, math
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from PIL import Image, ImageDraw
|
||||
from render_ui import draw_label, W, H
|
||||
from pages import PAGES
|
||||
|
||||
CX = CY = 233.0
|
||||
R = 233.0
|
||||
|
||||
|
||||
def render_raw(items):
|
||||
img = Image.new('RGBA', (W, None) if False else (W, H), (0, 0, 0, 0))
|
||||
d = ImageDraw.Draw(img)
|
||||
from render_ui import _rgb, font
|
||||
for it in items:
|
||||
k = it.get('kind')
|
||||
if k == 'rect':
|
||||
box = [it['x'], it['y'], it['x'] + it['w'] - 1, it['y'] + it['h'] - 1]
|
||||
r = it.get('radius', 0)
|
||||
if r:
|
||||
d.rounded_rectangle(box, radius=r, fill=_rgb(it['bg']) + (255,))
|
||||
else:
|
||||
d.rectangle(box, fill=_rgb(it['bg']) + (255,))
|
||||
elif k == 'circle':
|
||||
d.ellipse([it['x'], it['y'], it['x'] + it['w'] - 1, it['y'] + it['h'] - 1],
|
||||
fill=_rgb(it['bg']) + (255,))
|
||||
elif k == 'image':
|
||||
if os.path.exists(it['src']):
|
||||
im = Image.open(it['src']).convert('RGBA').resize((it['w'], it['h']), Image.LANCZOS)
|
||||
img.alpha_composite(im, (it['x'], it['y']))
|
||||
elif k == 'label':
|
||||
draw_label(img, d, it)
|
||||
return img
|
||||
|
||||
|
||||
print(f'{"page":<10} {"max r":>7} {"outside px":>11} worst point / note')
|
||||
print('-' * 78)
|
||||
for name, items in PAGES.items():
|
||||
im = render_raw(items)
|
||||
px = im.load()
|
||||
worst, wpt, outside = 0.0, None, 0
|
||||
for y in range(H):
|
||||
for x in range(W):
|
||||
if px[x, y][3] > 8:
|
||||
d = math.hypot(x - CX, y - CY)
|
||||
if d > worst:
|
||||
worst, wpt = d, (x, y)
|
||||
if d > R:
|
||||
outside += 1
|
||||
note = '全部在圆内' if worst <= R else f'会被切 {outside} px'
|
||||
print(f'{name:<10} {worst:>7.1f} {outside:>11} {wpt} {note}')
|
||||
print('-' * 78)
|
||||
print(f'圆心 ({CX:.0f},{CY:.0f}) 半径 {R:.0f} 画布 {W}x{H}')
|
||||
Reference in New Issue
Block a user