I only see this effect if the window for glut_input isn't it's
original size, which is expected since then the texture is being
resized. You should check the output of ppmrender, which will just
save the image instead of using GL to render it. Use a regular image
viewer to check.
Also, I don't think I've seen you mention anything about which
platform you're using. If you happen to be using a window manager that
is forcing an incorrect size on the GLUT window (either the requested
size is too big for your monitor or it's forcing it to a size to fit
with other windows, e.g. a tiling window manager), you would also see
this.
You can also, of course, change the texture settings in glut_input,
e.g. using GL_NEAREST to at least verify that's the issue. GL_NEAREST
won't give good looking results, but would demonstrate if texture
filtering is the issue since, by default, the glut_input window should
perfectly match the texture and just display each pixel directly.
-Ewen