#!/usr/bin/lua local filename = ... local name = filename:match("([^\\/]+)%..*$") .. "_preview" -- get colors local text = io.open(filename):read("*a") local colors = {} for r, g, b in text:gmatch("#(%x%x)(%x%x)(%x%x)") do r = tonumber(r, 16) g = tonumber(g, 16) b = tonumber(b, 16) table.insert(colors, { r, g, b }) end table.sort(colors, function(a, b) return a[1] + a[2] + a[3] < b[1] + b[2] + b[3] end) local function eq(a, b) return a[1] == b[1] and a[2] == b[2] and a[3] == b[3] end local prev = {} for i = #colors, 1, -1 do if eq(colors[i], prev) then table.remove(colors, i) else prev = colors[i] end end -- generate ppm file local w = 200 local h = 16 local fp = io.open(name .. ".ppm", "wb") fp:write("P3\n") fp:write(w, " ", h, "\n") fp:write("255\n") local row = {} for i = 0, w - 1 do local idx = math.floor((#colors / w) * i) + 1 local r, g, b = table.unpack(colors[idx]) table.insert(row, r) table.insert(row, g) table.insert(row, b) end row = table.concat(row, " ") .. "\n" for i = 1, h do fp:write(row) end fp:close() -- convert ppm file to png os.execute(string.format("convert %s.ppm %s.png", name, name)) os.execute(string.format("rm %s.ppm", name))