Wystarczy udostępnić wersję rozszerzoną i dodać jakieś efekty wizualne (ponieważ wizualne są dobre). ..
# 'divisor' : How much we expand the gradient (less is more)
# 'switch' : If True, start gradient from bottom to top
def fadeDownFromBlack(pic, divisor, switch=False):
w = getWidth(pic)
h = getHeight(pic)
startY = 0
endY = min(h-1, int(h/float(divisor)))
inc = 1
if (switch):
startY = h-1
endY = max(0, h-1 - int(h/float(divisor)))
inc = -1
color_ratio = float(divisor)/h
for y in range(startY, endY, inc):
for x in range(0,w):
px = getPixel(pic, x, y)
setRed(px, abs(startY - y)*(color_ratio)*getRed(px))
setGreen(px, abs(startY - y)*(color_ratio)*getGreen(px))
setBlue(px, abs(startY - y)*(color_ratio)*getBlue(px))
file = pickAFile()
picture = makePicture(file)
# The following commented line answers the question
#fadeDownFromBlack(picture, 2)
fadeDownFromBlack(picture, 0.7, True)
writePictureTo(picture, "/home/mad-king.png")
show(picture)
wyjściowa (Malarstwo Corneliu Baby - Mad króla):
............
............. .........
............
Zakładam, że korzystasz z PIL? (Tylko sprawdzam.) – MatrixFrog
Nie wierzę, nie. O ile nie jest wyposażony w Jython 4.3. – roger34
Z papieru: Aby przyciemnić piksel, pomnóż poziomy czerwony, zielony i niebieski przez odpowiednią frakcję. W szczególności, jeśli y znajduje się w górnej połowie obrazu, wszystkie piksele w wierszu y mają ich poziomy RGB pomnożone przez y * (2,0/h), gdzie h jest wysokością obrazu. Piksele w dolnej połowie obrazu nie są zmieniane. Zakładam, że nie potrzebuję używać SetBlue itp.? Czy mogę użyć zwrotu? – roger34