Advertisement
Guest User

Untitled

a guest
Sep 18th, 2021
1,504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends Node2D
  2.  
  3. const sizeX = 80
  4.  
  5. var colorData := {}
  6.  
  7. func _ready():
  8.     var image = Image.new()
  9.     image.load("res://palette/slso8-base.png")
  10.     image.lock()
  11.    
  12.     var centers := []
  13.     var lastGrey = grey(image.get_pixel(0, 0))
  14.     centers.append(lastGrey)
  15.     for x in range(1, image.get_width()):
  16.         var c = image.get_pixel(x, 1)
  17.         var currentGrey = grey(c)
  18.         if currentGrey != lastGrey:
  19.             centers.append(currentGrey)
  20.             lastGrey = currentGrey
  21.    
  22.     var dir = Directory.new()
  23.     dir.open("res://palette/in_palettes")
  24.     dir.list_dir_begin()
  25.  
  26.     while true:
  27.         var file = dir.get_next()
  28.         if file == "":
  29.             break
  30.         elif not file.begins_with(".") and file.ends_with(".png"):
  31.             createPalette(file, centers)
  32.    
  33.     dir.list_dir_end()
  34.    
  35.     var save = File.new()
  36.     var err = save.open("res://palette/out_palettes/data.json", File.WRITE)
  37.     if err == 0:
  38.         save.store_string(JSON.print(colorData))
  39.         save.close()
  40.     else:
  41.         print("failed to save color data file")
  42.    
  43.     print("finished generating palettes")
  44.  
  45. func grey(c:Color)->float:
  46.     return (c.r * 1.0 + c.g * 1.0 + c.b * 1.0) / 3.0
  47.  
  48.  
  49. func createPalette(file:String, centers:Array):
  50.     var image = Image.new()
  51.     image.load("res://palette/in_palettes/"+file)
  52.     var colors := getColors(image)
  53.     colorData[file] = colors
  54.  
  55.     var out := Image.new()
  56.     out.create(sizeX, 4, false, Image.FORMAT_RGB8)
  57.     out.lock()
  58.     var lastBorder := 0.0
  59.     for i in range(0, colors.size()):
  60.         var nextBorder = 0.5 * (centers[i] + centers[i+1]) if i < centers.size() - 1 else 1.0
  61.         for ox in range(lastBorder*sizeX, nextBorder*sizeX):
  62.             for oy in range(0, 4):
  63.                 out.set_pixel(ox, oy, colors[i])
  64.         lastBorder = nextBorder
  65.     out.unlock()
  66.     out.save_png("res://palette/out_palettes/"+file.substr(0, file.find("."))+".png")
  67.  
  68. func getColors(image:Image)->Array:
  69.     image.lock()
  70.     var colors := []
  71.     colors.append(image.get_pixel(0, 0))
  72.     var lastGrey = grey(image.get_pixel(0, 0))
  73.     for x in range(1, image.get_width()):
  74.         var c = image.get_pixel(x, 1)
  75.         var currentGrey = grey(c)
  76.         if currentGrey != lastGrey:
  77.             colors.append(c)
  78.             lastGrey = currentGrey
  79.     image.unlock()
  80.     return colors
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement