如何将精灵图像转换为星际模式的JSON?

时间:2015-07-04 02:48:34

标签: json rasterizing

在我玩的名为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变量可以是任何六位十六进制代码颜色。)

1 个答案:

答案 0 :(得分:1)

使用Ruby

您需要安装两个宝石:rmagickcolor

代码很短:

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

您可以添加一些其他位以使其在命令提示符下运行,或者只在requireirb并在那里调用该函数。