169 lines
2.9 KiB
Lua
169 lines
2.9 KiB
Lua
local cairo = require'cairo' --used to open the file
|
|
local bitmap = require'bitmap' --used to read its content
|
|
|
|
equivalents = {
|
|
[32]=" ",
|
|
[33]="!",
|
|
[34]="\\\"",
|
|
[35]="#",
|
|
[36]="$",
|
|
[37]="%",
|
|
[38]="&",
|
|
[39]="'",
|
|
[40]="(",
|
|
[41]=")",
|
|
[42]="*",
|
|
[43]="+",
|
|
[44]=",",
|
|
[45]="-",
|
|
[46]=".",
|
|
[47]="/",
|
|
[48]="0",
|
|
[49]="1",
|
|
[50]="2",
|
|
[51]="3",
|
|
[52]="4",
|
|
[53]="5",
|
|
[54]="6",
|
|
[55]="7",
|
|
[56]="8",
|
|
[57]="9",
|
|
[58]=":",
|
|
[59]=";",
|
|
[60]="<",
|
|
[61]="=",
|
|
[62]=">",
|
|
[63]="?",
|
|
[64]="@",
|
|
[65]="A",
|
|
[66]="B",
|
|
[67]="C",
|
|
[68]="D",
|
|
[69]="E",
|
|
[70]="F",
|
|
[71]="G",
|
|
[72]="H",
|
|
[73]="I",
|
|
[74]="J",
|
|
[75]="K",
|
|
[76]="L",
|
|
[77]="M",
|
|
[78]="N",
|
|
[79]="O",
|
|
[80]="P",
|
|
[81]="Q",
|
|
[82]="R",
|
|
[83]="S",
|
|
[84]="T",
|
|
[85]="U",
|
|
[86]="V",
|
|
[87]="W",
|
|
[88]="X",
|
|
[89]="Y",
|
|
[90]="Z",
|
|
[91]="[",
|
|
[92]="\\\\",
|
|
[93]="]",
|
|
[94]="^",
|
|
[95]="_",
|
|
[96]="`",
|
|
[97]="a",
|
|
[98]="b",
|
|
[99]="c",
|
|
[100]="d",
|
|
[101]="e",
|
|
[102]="f",
|
|
[103]="g",
|
|
[104]="h",
|
|
[105]="i",
|
|
[106]="j",
|
|
[107]="k",
|
|
[108]="l",
|
|
[109]="m",
|
|
[110]="n",
|
|
[111]="o",
|
|
[112]="p",
|
|
[113]="q",
|
|
[114]="r",
|
|
[115]="s",
|
|
[116]="t",
|
|
[117]="u",
|
|
[118]="v",
|
|
[119]="w",
|
|
[120]="x",
|
|
[121]="y",
|
|
[122]="z",
|
|
[123]="{",
|
|
[124]="|",
|
|
[125]="}",
|
|
[126]="~"
|
|
}
|
|
|
|
function int_hex(nb)
|
|
if equivalents[nb] then return equivalents[nb] end
|
|
if nb > 255 then print("uh", nb) end
|
|
if nb < 16 then add = "0"
|
|
else add = "" end
|
|
return [[\x]]..add..string.format("%x", nb)
|
|
end
|
|
|
|
file = io.open("imagination.py", "w")
|
|
first = true
|
|
pallet = {} --will store colors
|
|
pallet_last = 0
|
|
mem_pallet_last = 0
|
|
|
|
file:write([[from draw import *
|
|
black=(0,0,0)
|
|
for x in range(384):
|
|
for y in range(192):
|
|
set_pixel(x,y,black)
|
|
]])
|
|
|
|
for i = 1, 12, 1 do
|
|
print(i)
|
|
do --open image
|
|
path = "spongebob/resized_cropped_out-"
|
|
if i < 10 then path = path.."0" end
|
|
path = path..i.."0.png"
|
|
local image = cairo.load_png(path)
|
|
image_infos = {width = image:width(), height = image:height()}
|
|
image_bitmap = image:bitmap()
|
|
end
|
|
local getpixel, setpixel = bitmap.pixel_interface(image_bitmap)
|
|
|
|
file:write("\n", [[data=b"]])
|
|
--end
|
|
|
|
for j = 1, image_infos.height, 1 do
|
|
for i = 1, image_infos.width, 1 do
|
|
r, g, b = getpixel(i, j)
|
|
if not pallet[r..","..g..","..b] then
|
|
pallet[r..","..g..","..b] = pallet_last
|
|
pallet_last = pallet_last + 1
|
|
end
|
|
file:write(int_hex(pallet[r..","..g..","..b]))
|
|
end
|
|
end
|
|
file:write('"')
|
|
|
|
--let's write the pallet
|
|
if pallet_last > mem_pallet_last then
|
|
mem_pallet_last = pallet_last
|
|
file:write("\npallet={")
|
|
for i, v in pairs(pallet) do
|
|
file:write(v, ":(", i, "),")
|
|
end
|
|
file:write("}")
|
|
end
|
|
|
|
file:write("\ndraw(", math.floor(192 - image_infos.width / 2), ",")
|
|
file:write(math.floor(96 - image_infos.height / 2), ",data,pallet,")
|
|
file:write(image_infos.width, ")")
|
|
|
|
first = false
|
|
end
|
|
file:write('\nwait_ac("Press AC/ON to continue...")')
|
|
|
|
file:close()
|