生成3D验证码[pic]
4 个回答
2
我觉得你不需要为了上面提到的内容去使用一个完整的3D库。你可以先生成一个3D点的矩阵,然后用像PIL这样的工具生成文本,再扫描这个文本,找出网格上哪些点是突起的。接着,随机选择一个相机角度,把这些点投影到一个2D图像上,最后用PIL把它们画到最终的图像里。
不过,如果你不想自己处理3D数学运算的话,你可以试试VPython。
33
有很多方法可以做到这一点。我个人会使用Python的图像处理库,叫做
,通过它的draw.text功能来创建图像,然后把它转换成一个数组(使用NumPy的),最后用来渲染这个图像。(这需要Matplotlib的。)完整代码(在2.5版本中):
import numpy, pylab
from PIL import Image, ImageDraw, ImageFont
import matplotlib.axes3d as axes3d
sz = (50,30)
img = Image.new('L', sz, 255)
drw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 20)
drw.text((5,3), 'text', font=font)
img.save('c:/test.png')
X , Y = numpy.meshgrid(range(sz[0]),range(sz[1]))
Z = 1-numpy.asarray(img)/255
fig = pylab.figure()
ax = axes3d.Axes3D(fig)
ax.plot_wireframe(X, -Y, Z, rstride=1, cstride=1)
ax.set_zlim((0,50))
fig.savefig('c:/test2.png')
显然,这里还有一些工作要做,比如去掉坐标轴、改变视角等等。