#!/usr/bin/env python
import pygtk
import gtk
import Numeric
import sys
pygtk.require('2.0')
class GGRPy(object):
segments = {}
file = ["GIMP Gradient"]
def drawPreview(self, a):
print self.i.get_width()
#array = Numeric.zeros((40, self.i.get_width(),3), 'b')
data = [[100,255,0,0]]
for (x,r,g,b) in data:
self.array[0:40,int(a),:] = (r, g, b)
self.grad = gtk.gdk.pixbuf_new_from_array(self.array, gtk.gdk.COLORSPACE_RGB, 8)
self.gradi.set_from_pixbuf(self.grad)
return
def pressImage(self, widget, event):
pixel = self.i.subpixbuf(int(event.x), int(event.y), 1, 1)
col = pixel.get_pixels_array()
pix = []
#grab the R:G:B values from pixbuffer
pix.append(col[0][0][0][0])
pix.append(col[0][0][1][0])
pix.append(col[0][0][2][0])
print "(",event.x, ",", event.y,") :", pix
self.segments[event.x] = pix
self.drawPreview(event.x)
# for d in segs:
# print "ROW: ",d, "COL: ", self.segments[d]
def delete_event(self, widget, event, data=None):
# create the output file when exiting
boundrys = []
self.file.append(len(self.segments)-1)
print self.file
file = open(sys.argv[2]+".ggr", "w")
for line in self.file:
file.write(str(line)+"\n")
s_max = max(self.segments.items())[0]
s_min = min(self.segments.items())[0]
normal = s_max-s_min
segs = self.segments.keys()
segs.sort()
for seg in segs:
boundrys.append((seg-s_min)/normal)
for x in range(0,len(boundrys)-1):
# calculate the mid point for each boundry and
# normalize the color values
file.write("%6f %6f %6f %6f %6f %6f 1.000000 %6f %6f %6f 1.000000 0 0\n" % \
(boundrys[x],\
(boundrys[x]+boundrys[x+1])/2,\
boundrys[x+1],\
(self.segments[segs[x]][0]/255.0),\
(self.segments[segs[x]][1]/255.0),\
(self.segments[segs[x]][2]/255.0),\
(self.segments[segs[x+1]][0]/255.0),\
(self.segments[segs[x+1]][1]/255.0),\
(self.segments[segs[x+1]][2])/255.0)
)
file.write("\n")
file.close()
return False
def destroy(self, widget, data=None):
gtk.main_quit()
def __init__(self):
if len(sys.argv)<2:
print 'Usage: ggrpy.py IMAGE OUTPUT'
sys.exit()
self.file.append("Name: "+sys.argv[2])
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
self.window.set_border_width(1)
self.i = gtk.gdk.pixbuf_new_from_file(sys.argv[1])
self.main_vbox = gtk.VBox(False, 1)
self.main_vbox.set_border_width(1)
self.image = gtk.Image()
self.image.set_from_pixbuf(self.i)
self.event_box = gtk.EventBox()
self.event_box.add(self.image)
self.event_box.connect("button_release_event", self.pressImage)
self.array = Numeric.zeros((40, self.i.get_width(),3), 'b')
self.grad = gtk.gdk.pixbuf_new_from_array(self.array, gtk.gdk.COLORSPACE_RGB, 8)
self.gradi = gtk.Image()
self.gradi.set_from_pixbuf(self.grad)
self.main_vbox.pack_start(self.event_box, False, True, 0)
self.main_vbox.pack_start(self.gradi, False, True, 0)
self.window.add(self.main_vbox)
self.window.show_all()
def main(self):
gtk.main()
if __name__ == '__main__':
ggr = GGRPy()
ggr.main()
syntax highlighted by Code2HTML, v. 0.9.1