43 lines
1.5 KiB
Bash
43 lines
1.5 KiB
Bash
#!/bin/bash
|
|
# 게임 화면을 검정 여백까지 그대로 찍는다(UI 포함). source capfull.sh 뒤 capfull <이름>
|
|
# bt.sh 의 cap 은 검정 여백을 잘라 내므로, 화면 전체의 구성(어디가 비고 어디에 게임이 그려지는지)을 볼 때는 이것을 쓴다
|
|
capfull() {
|
|
local name="$1"
|
|
unity command capture_game_view --source screen --project-path "$P" --format json --no-banner 2>&1 | python -c "
|
|
import sys, json, base64, io
|
|
d = json.loads(sys.stdin.read())
|
|
r = (d.get('data') or {}).get('result') or {}
|
|
def find(o):
|
|
if isinstance(o, dict):
|
|
for k, v in o.items():
|
|
if isinstance(v, str) and len(v) > 1000:
|
|
return v
|
|
f = find(v)
|
|
if f: return f
|
|
if isinstance(o, list):
|
|
for v in o:
|
|
f = find(v)
|
|
if f: return f
|
|
return None
|
|
def meta(o, keys=('width', 'height', 'source')):
|
|
out = {}
|
|
if isinstance(o, dict):
|
|
for k, v in o.items():
|
|
if k in keys and not isinstance(v, (dict, list)): out[k] = v
|
|
elif isinstance(v, dict): out.update(meta(v, keys))
|
|
return out
|
|
b = find(r)
|
|
if not b:
|
|
print('NO IMAGE', json.dumps(d)[:500]); sys.exit(0)
|
|
data = base64.b64decode(b)
|
|
out = r'$SP/cap/$name.png'
|
|
from PIL import Image
|
|
im = Image.open(io.BytesIO(data)).convert('RGB')
|
|
full = im.size
|
|
gray = im.convert('L').point(lambda p: 255 if p > 10 else 0)
|
|
box = gray.getbbox()
|
|
im.save(out)
|
|
print('saved', out, 'size', full, 'meta', meta(r), '검정이 아닌 영역', box)
|
|
"
|
|
}
|