我正在尝试将Linux(c ++ / Qt4.5.x)服务器守护程序中的png映像提供给使用Three20框架的iPhone应用程序 - 特别是我想使用TTThumbsViewController视图。
我设法让任何网页浏览器查看图像,当我的守护程序“获取”请求时,在我的守护程序中返回以下内容:
QTextStream os(socket);
os.setAutoDetectUnicode(true);
QByteArray base64 = array.toBase64();
os << "HTTP/1.1 200 Ok\r\n"
"Host: software.local\r\n"
"\r\n"
"<html>"
"<body>"
"<img src=\"data:image/png;base64," << base64 << "\" />"
"</body>";
其中“array”是png的图像数据;我正在打字:
http://software.local:8080/test.png
进入浏览器查看图像。
当我尝试在我的照片来源类中使用类似
的内容指定相同的网址时[MockPhoto alloc]
initWithURL:@"http://software.local:8080/test.png"
smallURL:@"http://software.local:8080/test.png"
size:CGSizeMake(480, 320)] autorelease],
...
没有返回或显示任何内容?
我的问题是 - 如果我把test.png说成Linux PC上合适的目录并启动一个Web服务器(apache),然后浏览到“http://software.local/test.png我看到上面的图像,但是图像没有嵌入到http标头中?我真的无法弄清楚标头应该是什么来获得这种行为。如果我在上面的iPhone代码中设置了URL,那么它从apache服务器加载png我在TTThumbsViewController。
任何帮助都会很棒,或者更好的方式来做到这一点 - 我只有基本的http体验,你可以看到。
答案 0 :(得分:2)
您的脚本没有提供图片,它正在提供将由浏览器解释的HTML。我从来没有使用过three20的框架,但我敢打赌他们期待一个png作为数据返回,并嵌入到html文档中。由于您正在测试的浏览器能够理解html以及原始图像数据,因此它将显示图像。
要实现此功能,您需要将内容类型标题设置为“image / png”,然后发送图像数据。我不知道如何在QT中这样做,抱歉:(
萨姆
答案 1 :(得分:0)
我曾经用PHP做过这个。将这些标题翻译成您的QT回音字符串。
header('Last-Modified: ' . date('r'));
header('Accept-Ranges: bytes');
header('Content-Length: ' . $imageSize);
header('Content-Type: image/png');
print(file_get_contents($file));
如果有必要,不太确定base64