美文网首页Minecraft
自动将 Dynmap 网页上的地图图片合成为一张图

自动将 Dynmap 网页上的地图图片合成为一张图

作者: Frost_ZX | 来源:发表于2020-06-30 23:03 被阅读0次

游戏版本:Minecraft Java Edition 1.12.2
Dynmap 版本:3.0 Beta 4

简介

  • 根据我的 Minecraft 服务器的一位玩家的需求写的 JavaScript。
  • 可自动将 Dynmap 网页上分块的地图图片合成为一张图。
  • 建议使用 Chrome 浏览器或 Chromium 内核的浏览器进行操作。
  • 因为是在 前端 进行合成,需要在操作前浏览一次要导出的地图区域。
  • 结果会在新窗口中显示(若不能弹出新窗口,请将 弹出新窗口 设置为 允许)。
  • 不建议合成过大的区域,否则可能会导致浏览器崩溃。
  • 本代码可能并不是最优的方案,欢迎各位在评论区提出建议。

代码

2020-06-28

var base64_data = '';
var images = document.querySelectorAll('#mcmap .map .leaflet-map-pane .leaflet-tile-pane .leaflet-layer img');
var images_len = images.length;                                   // 图片数量
var result_window = window.open('', '', 'width=800, height=480'); // 新窗口:显示结果
function getTrans3DInfo(elem) {
    // 提取 translate3d X Y Z 的值(文本)并转换为数字
    var trans3d_info = elem.style.transform.replace(/translate3d\(|px|\)/g, '').split(', ').map(Number);
    // X, Y
    return [trans3d_info[0], trans3d_info[1]];
}
function gettrans_info() {
    console.log('获取 Transform 最值信息');
    var image_trans;
    var min_x = 0, min_y = 0, max_x = 0, max_y = 0;
    for (let i = 0; i < images_len; i++) {
        image_trans = getTrans3DInfo(images[i]);
        if (image_trans[0] < min_x) {
            min_x = image_trans[0];
            // console.log("min_x 元素:" + i);
        }
        if (image_trans[1] < min_y) {
            min_y = image_trans[1];
            // console.log("min_y 元素:" + i);
        }
        if (image_trans[0] > max_x) {
            max_x = image_trans[0];
            // console.log("max_x 元素:" + i);
        }
        if (image_trans[1] > max_y) {
            max_y = image_trans[1];
            // console.log("max_y 元素:" + i);
        }
    }
    return [min_x, min_y, max_x, max_y];
}
function draw(fn) {
    console.log("开始绘制");
    var trans_info = gettrans_info();
    var c = document.createElement('canvas');
    var ctx = c.getContext('2d');
    c.width = trans_info[2] - trans_info[0];  // 画布元素宽度
    c.height = trans_info[3] - trans_info[1]; // 画布元素高度
    ctx.rect(0, 0, c.width, c.height);        // 创建矩形画布
    // ctx.fillStyle = '#FFF';
    // ctx.fill();
    function drawing(n) {
        console.log('绘制中:' + n + ' / ' + images_len);
        if (n < images_len) {
            var image_trans = getTrans3DInfo(images[n]);
            var pos_x = image_trans[0] + Math.abs(trans_info[0]);
            var pos_y = image_trans[1] + Math.abs(trans_info[1]);
            console.log("坐标:" + pos_x + ", " + pos_y);
            ctx.drawImage(images[n], pos_x, pos_y);
            // 递归
            drawing(n + 1);
        } else {
            console.log('已合成,等待显示结果');
            // base64_data = c.toDataURL('image/jpeg', 0.8); // JPEG
            base64_data = c.toDataURL('image/png');          // PNG
            fn();
        }
    }
    drawing(0);
}
function mergeImages() {
    console.log('开始合成');
    draw(function() {
        result_window.document.write('<img src="' + base64_data + '" />');
        result_window.focus();
        console.log('结束');
    })
}
mergeImages();

使用方式(二选一)

常规方式

  1. 在浏览器打开 Dynmap 的页面。

  2. 打开浏览器的 开发人员工具(可使用快捷键 Ctrl + Shift + I)。

    第二步
  3. 切换到 Console(控制台)标签页,并将上方的 代码 粘贴至输入区。

    第三步
  4. 按下 Enter(回车),等待即可。

对于管理员

  • 若您是服务器的管理人员,且对 HTML、CSS、JavaScript 有了解,可将本代码写入到 Dynmap 的网页中(例如:作为点击事件绑定到特定的按钮上)。

相关文章

  • 自动将 Dynmap 网页上的地图图片合成为一张图

    游戏版本:Minecraft Java Edition 1.12.2Dynmap 版本:3.0 Beta 4 简介...

  • 雪碧图和background属性

    雪碧图 就是将网页制作中使用的多个小图片合并成一个图片,使用css计数将这张合成的图片应用在网页不同的地方,雪碧图...

  • CSS 常见技巧

    CSS Sprite(雪碧图) 将多个图片合并成一张,用显示不同的部分来实现减少http请求数量,加速网页内容显示...

  • 贴图图册帮助(译)

    关于贴图图册 将应用的图片自动的合并成一张大的图片,叫做贴图图册。主要是为了提高应用性能贴图图册通过将应用所有的图...

  • 使用Python获取页面图片信息并下载图片

    近期个人需要在一些网页上获取图片,因一张张图片保存实在麻烦,研究了下使用Python自动化获取并下载图片,以下是研...

  • 雪碧图

    雪碧图: 就是将网页制作中使用的多个小图片合并成一个图片,使用css计数将这张合成的图片应用在网页不同的地方,雪碧...

  • Flutter加载本地和网络图片(含普通图片和gif动图)

    本文目的 在Flutter中加载本地图片和网络图片 效果图 1. 加载本地图片 将图片放在工程目录下,如image...

  • 图象风格迁移

    什么是图象风格迁移 图象风格迁移就是将一张图片的某种风格或者特征应用到另一张图片上。例如ps或者powerpoin...

  • react-native-swiper 第一次先显示最后一张最后

    问题描述:当年swiper显示的是本地图片数据时,不会出现swiper第一次显示的是最后一张图,并自动播放卡住至最...

  • Godot Shader特效:2D 溶解效果

    效果图如下 准备工作 一张png的角色图片角色图片 一张噪声图片,这次使用的是Godot自动生成噪声图片,当然你也...

网友评论

    本文标题:自动将 Dynmap 网页上的地图图片合成为一张图

    本文链接:https://www.haomeiwen.com/subject/vitqqktx.html