jgtrosh

pixelsort_anim.lua

Nov 10th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.23 KB | None | 0 0
  1. require "gd"
  2.  
  3. local base = gd.createFromJpeg("frm/frm9.jpg") --first of the frames exported via ffmpeg -sameq "frm%2d.jpg"
  4. local sizex, sizey = base:sizeXY()
  5. local frame = gd.create(sizex, sizey)
  6.  
  7. function lum(c)
  8.     local r = base:red(c)
  9.     local g = base:green(c)
  10.     local b = base:blue(c)
  11.     return (r+g+b)/3
  12. end
  13.  
  14. frame:gifAnimBegin("out.gif", false, 0)
  15. for frm = 1, 40 do
  16.     base = gd.createFromJpeg("frm/frm"..(8+frm)..".jpg")
  17.     local out = gd.createTrueColor(sizex, sizey)
  18.     for x = 1, sizex do
  19.         local startsort = 1
  20.         local sortc = base:getPixel(x, 1)
  21.         local sortw = lum(sortc)
  22.         local sortlist = {{c = sortc, w = sortw}}
  23.         for y = 2, sizey do
  24.             local color = base:getPixel(x, y)
  25.             local w = lum(color)
  26.             if math.abs(w-sortw) > 4*(frm-1) or y == sizey then
  27.                 table.sort(sortlist, function(a, b) return a.w < b.w end)
  28.                 for ly = 1, #sortlist do
  29.                     out:setPixel(x, startsort+ly-1, sortlist[#sortlist-ly+1].c)
  30.                 end
  31.                 startsort = y
  32.                 sortw = w
  33.                 sortlist = {{c = color, w = w}}
  34.             else
  35.                 table.insert(sortlist, {c = color, w = w})
  36.             end
  37.         end
  38.     end
  39.     frame = out:createPaletteFromTrueColor(true, 50)
  40.     frame:gifAnimAdd("out.gif", true, 0, 0, 8, gd.DISPOSAL_NONE)
  41.     print("frame:", frm)
  42. end
  43. gd.gifAnimEnd("out.gif")
Advertisement
Add Comment
Please, Sign In to add comment