python / cgi - 提供扭曲的图像

时间:2010-10-30 19:36:03

标签: python apache http header

我现在一直在努力工作几个小时,用python cgi网站提供jpg服务。由于某种原因,图像总是扭曲。

这是我的代码:

print('Content-type: image/jpg\n')
path = 'C:\\Users\\Admin\\Documents\\image.jpg'
print file(path, 'rb').read()

This post描述了一个几乎相同的问题,但我没有使用WSGI。我正在使用Windows和Apache,并且使用\r\n\r\n以及print 'Content-type: image/jpg\r\n\r\n',。同样地,我试过print file(path, 'rb').read(),认为新的一行可能会以某种方式扭曲图像。

还有其他故障排除方法吗?

谢谢, 约什

PS。该网站必须保留为cgi网站。

[edit]更改为print('Content-type: image/jpeg\n')

[edit]示例图片:alt text

1 个答案:

答案 0 :(得分:2)

This article显示使用C ++向CGI发送文件。该程序需要注意将stdout转换为二进制文件:

int main()
{
#if _WIN32
    // Standard I/O is in text mode by default; since we intend
    // to send binary image data to standard output, we have to
    // set it to binary mode.
    // Error handling is tricky to say the least, so we have none.
    _fmode = _O_BINARY;
    if (_setmode(_fileno(stdin), _fmode) == -1) {}
    if (_setmode(_fileno(stdout), _fmode) == -1) {}
#endif

你可以在python中做到这一点。 Here是特定于Windows的解决方案:

import sys

if sys.platform == "win32":
    import os, msvcrt
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

Here是特定于python 3.x的代码:

  

标准流处于文本模式   默认情况下。写或读二进制   数据到这些,使用底层   二进制缓冲区例如,要写   字节到标准输出,使用   sys.stdout.buffer.write(b'abc')。运用   io.TextIOBase.detach()流可以   默认为二进制。这个功能   将stdin和stdout设置为二进制:

def make_streams_binary():
    sys.stdin = sys.stdin.detach()
    sys.stdout = sys.stdout.detach()

后来:我也认为你应该能够对你的jpeg进行UU64编码并通过网络发送它作为具有适当内容长度和内容类型的文本,但我从来没有在这个级别上完成HTTP。你必须要查找它。