def verticalFlip(image): outimage = Create.newImage(image[0], image[1], 0, image[2]) for y in xrange(image[1]): ny = (image[1]-1) - y for x in xrange(image[0]): inew = arrayIndex2To1(x, ny, image[0], 3) iold = arrayIndex2To1(x, y, image[0], 3) outimage[iold] = image[inew][:] return outimage
def overlay(under_image, over_image, x, y, combine=CombineFunctions.paint, cparams=[], ignorecolor=None): #print(under_image) for oy in xrange(over_image[1]): #if oy + y < 0: continue #if oy + y > under_image[1]-1: continue for ox in xrange(over_image[0]): #if ox + x < 0: continue #if ox + x > under_image[1]-1: continue ui = arrayIndex2To1(ox+x, oy+y, under_image[0], 3) oi = arrayIndex2To1(ox, oy, over_image[0], 3) #print(ignorecolor, over_image[oi]) if over_image[oi] != ignorecolor: under_image[ui] = combine(under_image[ui], over_image[oi], *cparams) return
def getSubImage(image, x, y, width, height): outimage = Create.newImage(width, height, 0, image[2]) oi = 3 for ty in xrange(height): for tx in xrange(width): i = arrayIndex2To1(tx+x, ty+y, image[0], 3) outimage[oi] = image[i][:] oi += 1 return outimage
def invertImage(image, channels=None, minv=0, maxv=1.0): if channels is None: channels = [] for i in xrange(image[2]): channels.append(i) for oy in xrange(image[1]): for ox in xrange(image[0]): i = arrayIndex2To1(ox, oy, image[0], 3) for ch in channels: image[i][ch] = (maxv-image[i][ch])+minv return
def tileImage(imagepool, tile_map, colormap=None, tintcombine=CombineFunctions.multiply, tintcparams=[]): outimage = Create.newImage(tile_map[0]*imagepool[0][0], tile_map[1]*imagepool[0][1], initialcolor=0, channels=imagepool[0][2]) for tmy in xrange(tile_map[1]): for tmx in xrange(tile_map[0]): i = arrayIndex2To1(tmx, tmy, tile_map[0], 3) if colormap != None: tile = clone(imagepool[tile_map[i][0]]) Modify.applyColor(tile, colormap[i], tintcombine, tintcparams) Modify.overlay(outimage, tile, tmx*imagepool[0][0], tmy*imagepool[0][1]) else: Modify.overlay(outimage, imagepool[tile_map[i][0]], tmx*imagepool[0][0], tmy*imagepool[0][1]) return outimage
def normalize(image, minv, maxv, channels=None, sameinrange=True): if channels is None: channels = [] for i in xrange(image[2]): channels.append(i) if sameinrange: inmin = () inmax = None for oy in xrange(image[1]): for ox in xrange(image[0]): i = arrayIndex2To1(ox, oy, image[0], 3) for ch in channels: if inmin > image[i][ch]: inmin = image[i][ch] if inmax < image[i][ch]: inmax = image[i][ch] fmin = [] fmax = [] for t in xrange(len(channels)): fmin.append(inmin) fmax.append(inmax) else: inmin = [] inmax = [] for t in xrange(len(channels)): inmin.append(()) inmax.append(None) for oy in xrange(image[1]): for ox in xrange(image[0]): i = arrayIndex2To1(ox, oy, image[0], 3) for i, ch in enumerate(channels): if inmin[i] > image[i][ch]: inmin[i] = image[i][ch] if inmax[i] < image[i][ch]: inmax[i] = image[i][ch] fmin = inmin fmax = inmax for oy in xrange(image[1]): for ox in xrange(image[0]): i = arrayIndex2To1(ox, oy, image[0], 3) for j, ch in enumerate(channels): image[i][j] = PyRange.rangeToRange(image[i][j], fmin[j], fmax[j], minv[j], maxv[j]) return
def shrinkImage(image, newwidth, newheight): xgridsize = int(image[0] / newwidth) ygridsize = int(image[1] / newheight) outimage = Create.newImage(newwidth, newheight, 0, image[2]) t = [] div = xgridsize*ygridsize for gy in xrange(newheight): for gx in xrange(newwidth): xstart = gx * xgridsize xend = xstart + xgridsize ystart = gy * ygridsize yend = ystart + ygridsize t = [0 for x in range(image[2])] for py in xrange(ystart, yend): for px in xrange(xstart, xend): index = arrayIndex2To1(px, py, image[0], 3) for i, c in enumerate(image[index]): t[i] += c for i in range(len(t)): t[i] /= div nindex = arrayIndex2To1(gx, gy, newwidth, 3) outimage[nindex] = t[:] return outimage
def getColorAt(image, x, y): i = arrayIndex2To1(x, y, image[0], 3) return image[i]