Minecraft自动生成像素画


不知道你是否羡慕过b站大佬们手撸的像素画(比如万能的TIPS里的香兰子),像我画画都画不好的人想要手撸大大的像素画就真的太难了。然后我就去找自动生产像素画的工具,结果没一个能用的。鸽了一个月,考完时候后就用上自己入门级的jvav给随手写了出来,效果不算好,但勉强能用吧,服务器里的朋友也直呼NB~

acg.gy_32.jpg

食用方法

!!注意!!

该工具基于Minecraft的function指令,请确认自己的mc版本是否支持(测试通过版本:1.16,1.16.1)

本地使用

Github仓库:https://github.com/DGPassbyA/MCPixelDrawing,或直接下载 MCPixelDrawing-jar.7z ,按Readme.md中的方法食用即可

服务器使用

  1. 如果你是腐竹,食用方法和上面一致
  2. 如果是玩家而且无法直接修改服务器文件,或者无法执行指令,建议安装masa全家桶,在本地生成像素画,运用投影模组搬运像素画到服务器,关于masa的安装和使用可以上b站看视频(推荐 黑山大叔一颗萝卜CarrotLee

思路简析

  1. 读取图片,改变图片像素大小,使得一个像素对应一个方块(PixelImage.resize()),并输出颜色矩阵(`PixelImage.getPixelMatrix())
  2. 读取储存方块颜色信息(JSONReader.readJSON()),并转化为列表(JSONReader.strToList()
  3. 把颜色矩阵的每一格与方块列表对比,选出方块列表里颜色最相近的一个方块(Converter.compareColor()),并写入mcfunction指令(Converter.writeFile()

后谈

关于直观感受不好的几个原因分析:

自动生成像素画的核心就是如何替换方块,我只是简单的使用了RGB的三点距离公式,距离最小当作颜色最相近,但是显然这样的函数曲线不一定最吻合人眼的感受,应该在计算距离时给RGB三维的距离平方差分别加上一个系数再进行下一步计算,这样的三个系数怎么获取就是另一个问题了(咕~)

另一方面应该就是统计方块颜色的误差了,毕竟许多mc方块的颜色并不单一,我只是简单挑了面积最大的一种颜色

还有就是在转换图片像素的时候,图片的质量会损失