我对JES 视频功能和您的代码的第一眼告诉我类似(完全工作的示例):
import os
import random
def synthesizeFrameAndCreateMovie(folder):
# Create an empty movie to receive the frames
movie = makeMovie()
# Compute & save the frames
w = 40
h = 25
nb_frames = 60 # Will give 60 frames at 30 fps => movie duration : 2 sec.
for z in range(0, nb_frames):
pic=makeEmptyPicture(w, h)
for x in range (0, w):
for y in range (0, h):
#makeColor() takes red, green, and blue (in that order) between 0 and 255
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
color = makeColor(r,g,b)
px = getPixel(pic, x, y)
setColor(px, color)
# Create one frame and inject in the movie object
filename = os.path.join(folder, 'pic%03d.png' % z)
writePictureTo(pic, filename)
addFrameToMovie(filename, movie)
# return the movie
return movie
movie = synthesizeFrameAndCreateMovie("D:\\FOLDER")
print movie
#writeQuicktime(movie,"D:\\FOLDER\\movie.mov", 30)
playMovie(movie)
输出(帧):
……………………………………………………………… _ _ _ _ _ _ _ _ _ _ _ _
编辑 :
更有趣:为线条制作动画(此处采用代码形式)...
import os
import random
# Draw point, with check if the point is in the image area
def drawPoint(pic, col, x, y):
if (x >= 0) and (x < getWidth(pic)) and (y >= 0) and (y < getHeight(pic)):
px = getPixel(pic, x, y)
setColor(px, col)
# Draw line segment, given two points
# From Bresenham's line algorithm
# http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
def drawLine(pic, col, x0, y0, x1, y1):
dx = abs(x1-x0)
dy = abs(y1-y0)
sx = sy = 0
#sx = 1 if x0 < x1 else -1
#sy = 1 if y0 < y1 else -1
if (x0 < x1):
sx = 1
else:
sx = -1
if (y0 < y1):
sy = 1
else:
sy = -1
err = dx - dy
while (True):
drawPoint(pic, col, x0, y0)
if (x0 == x1) and (y0 == y1):
break
e2 = 2 * err
if (e2 > -dy):
err = err - dy
x0 = x0 + sx
if (x0 == x1) and (y0 == y1):
drawPoint(pic, col, x0, y0)
break
if (e2 < dx):
err = err + dx
y0 = y0 + sy
# Draw infinite line from segment
def drawInfiniteLine(pic, col, x0, y0, x1, y1):
# y = m * x + b
m = (y0-y1) / (x0-x1)
if (abs(m) > 100.0):
m = 100.0
# y0 = m * x0 + b => b = y0 - m * x0
b = y0 - m * x0
x0 = 0
y0 = int(m*x0 + b)
# get a 2nd point far away from the 1st one
x1 = getWidth(pic)
y1 = int(m*x1 + b)
drawLine(pic, col, x0, y0, x1, y1)
# Draw infinite line from origin point and angle
# Angle 'theta' expressed in degres
def drawInfiniteLineA(pic, col, x, y, theta):
# y = m * x + b
dx = y * tan(theta * pi / 180.0) # (need radians)
dy = y
if (dx == 0):
dx += 0.000000001 # Avoid to divide by zero
m = dy / dx
# y = m * x + b => b = y - m * x
b = y - m * x
# get a 2nd point far away from the 1st one
x1 = 2 * getWidth(pic)
y1 = m*x1 + b
drawInfiniteLine(pic, col, x, y, x1, y1)
def synthesizeFrameAndCreateMovie(folder):
# Create an empty movie to receive the frames
movie = makeMovie()
# Compute & save the frames
w = 40
h = 25
nb_frames = 120 # Will give 120 frames at 30 fps => movie duration : 4 sec.
for z in range(0, nb_frames):
pic = makeEmptyPicture(w, h)
addRectFilled(pic, 0, 0, w-1, h-1)
#makeColor() takes red, green, and blue (in that order) between 0 and 255
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
col = makeColor(r,g,b)
theta = z * 360 / nb_frames
if (theta != 180.0) and (theta != 0.0):
drawInfiniteLineA(pic, col, w//2, h//2, theta)
# Create one frame and inject in the movie object
filename = os.path.join(folder, 'pic%03d.png' % z)
writePictureTo(pic, filename)
addFrameToMovie(filename, movie)
# return the movie
return movie
movie = synthesizeFrameAndCreateMovie("/home/FOLDER")
print movie
#writeQuicktime(movie,"/home/golgauth/Desktop/FOLDER/movie.mov", 30)
#writeAVI(movie,"/home/golgauth/Desktop/FOLDER/movie.avi")
playMovie(movie)
输出(帧):
……………………………………………………………… _ _ _ _ _ _ _ _ _ _ _ _