import sys, math, time from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * import Image img = Image.open('image.jpg').transpose(Image.FLIP_TOP_BOTTOM) imgstring = img.tostring() def draw(): glClear(GL_COLOR_BUFFER_BIT) glPixelStorei(GL_UNPACK_ALIGNMENT, 1) glPixelTransferf(GL_BLUE_BIAS, math.sin(time.time())) glRasterPos2f(-1, -1) glDrawPixels(img.size[0], img.size[1], GL_RGB, GL_UNSIGNED_BYTE, imgstring) glutSwapBuffers() def keyboard(key, x, y): if key == chr(27): sys.exit(0) elif key == ' ': w = glutGet(GLUT_WINDOW_WIDTH) h = glutGet(GLUT_WINDOW_HEIGHT) pixdata = glReadPixels(0,0,w,h,GL_RGB,GL_UNSIGNED_BYTE) outimg = Image.fromstring('RGB', (w,h), pixdata) outimg.transpose(Image.FLIP_TOP_BOTTOM).save('output.jpg') def idle(): glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) glutInitWindowSize(img.size[0], img.size[1]) glutInitWindowPosition(0,0) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutIdleFunc(idle) glutMainLoop()