在我玩的名为Starbound的游戏中,我正在尝试创建一个修改过的项目。在游戏中,项目代码基于JSON字符串。我创建的项目上的字符串示例使用以下JSON来区分游戏中的可绘制项目:
[{
"image":"/particles/ash/3.png?setcolor=090909",
"position":[0,0]
},
... and so on for each pixel in the image ...
]
有没有办法可以拍摄已经在PNG格式的图像编辑软件中创建的精灵,保持透明度,并将颜色和像素位置栅格化为这种JSON格式?类似于将PNG图像转换为此格式的批处理文件就可以了。 (我可以手动编写JSON,但我真的不想这样做。)
据我所知,游戏提供了一些有限的图块,可用于绘制图像。一般情况下,我的图像应根据其提供的图块光栅化为此JSON格式:
[ { "image": "tile.png?setcolor=FFFFFF", "position": [X,Y] }, ... ]
(在这种格式中,setcolor
变量可以是任何六位十六进制代码颜色。)
答案 0 :(得分:1)
您需要安装两个宝石:rmagick
和color
。
代码很短:
require 'Rmagick'
require 'color'
require 'json'
def rasterize_to_json(inImagePath, outJsonPath)
image = Magick::Image.read(inImagePath)
pixels = []
image.each_pixel do |px,col,row|
hsla = px.to_hsla
if hsla[3] > 0.75 # ignore pixels that are less than 75% opaque
# Need to convert the HSL into HTML hex code (dropping the '#')
hexcode = (Color::HSL.new(*hsla[0,2]).to_rgb.html.upcase)[1,6]
pixels << { :image => "/tile.png?setcolor=#{hexcode}", :position => [col, row] }
end
end
f = File.new(outJsonPath, "w")
f.write(pixels.to_json)
f.close
end
您可以添加一些其他位以使其在命令提示符下运行,或者只在require
中irb
并在那里调用该函数。