我现在一直在努力工作几个小时,用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]示例图片:
答案 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。你必须要查找它。