【发布时间】:2010-11-04 12:53:05
【问题描述】:
【问题讨论】:
-
还有一个问题:3d 验证码更难识别吗?
-
困难得多。阅读“来源”了解更多信息。
-
哦不,真的有人叫它茶包吗??
-
是的。他们实际上把这个卖给了大公司。
【问题讨论】:
为 OpenGL 使用 Python 绑定,http://pyopengl.sourceforge.net/。
使用PIL 在黑色表面上创建白色文本的 2D 图像。 从这里制作一个3D网格,增加颜色为白色的点的z, 可以设置 z=color 值,所以通过模糊图像可以得到 z 方向的真实曲线。
从这些点创建一个 OpenGL 三角形,在渲染时使用线框模式。
将 OpenGL 缓冲区抓取到图像中,例如, http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.html.
【讨论】:
有很多方法。我会亲自使用ImageDraw 的draw.text 在Python Imaging Library 中创建图像,转换为NumPy 数组(使用NumPy 的asarray),然后使用Matplotlib 进行渲染。 (需要 Matplotlib maintenance package)。
完整代码(在 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')
显然还有一些工作要做,消除轴,改变视角等等。
【讨论】:
使用 opengl 渲染时要考虑的另一个绑定是 pyglet。它的最大特点是只需下载一次。我认为它包含了实现 Anurag 所阐述的一切所需的一切。
我会提醒你,你要做的并不是一个简单的第一个 3D 图形项目。如果这是您第一次接触 OpenGL,请考虑一系列教程,例如 NeHe Tutorials 以及来自 OpenGL website 的其他帮助。
【讨论】:
我不确定我是否会为您上面所拥有的完整的 3D 库而烦恼。只需生成一个 3D 点矩阵,用 PIL 之类的东西生成文本,扫描它以查找网格上的哪些点被抬起,选择一个随机的摄像机角度,然后将这些点投影到 2D 图像中,并用 PIL 将它们绘制到最终图像。
话虽如此...如果您不想自己进行 3D 数学运算,可以使用 VPython。
【讨论】: