NISHIO Hirokazu[Translate]
dynmapのタイルを繋ぎ合わせて大きな画像をつくる
マイクラdynmapが生成するマップタイルを一つの画像に結合したい。
今まではdynmapの画面を開いてスクリーンショットを撮っていたが、cronで自動的に日付をつけて保存したいのでスクリプトを書く。

python
import numpy as np import skimage.util import skimage.io images = [] for x in reversed(range(32)): for y in range(32): image = skimage.io.imread(f'/opt/minecraft_server/plugins/dynmap/web/tiles/world/t/0_0/{y}_{x}.jpg/') images.append(image) out = skimage.util.montage(images, grid_shape=(32, 32), multichannel=True) skimage.io.imsave('out.jpg', out)
できた

違う場所もつくる
py
import numpy as np import skimage.util import skimage.io TILE_DIR = "/opt/minecraft_server/plugins/dynmap/web/tiles" world = "world" cx = 0 cy = 1 images = [] for x in reversed(range(32)): for y in range(32): gx = cx * 32 + x gy = cy * 32 + y image = skimage.io.imread(f'{TILE_DIR}/{world}/t/{cy}_{cx}/{gy}_{gx}.jpg/') images.append(image) out = skimage.util.montage(images, grid_shape=(32, 32), multichannel=True) skimage.io.imsave('out.jpg', out)
チャンクだと思ってcxって名前にしたけどそういうわけではないみたいだな、チャンクは16単位だから。

人手でのスクリーンショットではなくタイルの結合なので並びるとピッタリつながる
(PCで見ると並んでる、スマホだと横幅が足りないので改行されて見える)

あとはこれを日時付きで保存するようにしてcronで起動する
py
#!/home/nishio/venv/bin/python import numpy as np import skimage.util import skimage.io import time # settings TILE_DIR = "/opt/minecraft_server/plugins/dynmap/web/tiles" OUT_DIR = "/home/nishio/dynmap_concat" world = "world" tx = 0 ty = 1 targets = [[0, 0], [0, 1]] # end settings today = time.strftime("%Y-%m-%d") for [tx, ty] in targets: images = [] for x in reversed(range(32)): for y in range(32): gx = tx * 32 + x gy = ty * 32 + y image = skimage.io.imread(f'{TILE_DIR}/{world}/t/{ty}_{tx}/{gy}_{gx}.jpg/') images.append(image) out = skimage.util.montage(images, grid_shape=(32, 32), multichannel=True) skimage.io.imsave(f'{OUT_DIR}/{tx}_{ty}_{today}.jpg', out)

TODO ある程度溜まったら繋げてタイムラプス動画にする

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]