通过http向Three20 iPhone应用程序提供PNG图像

时间:2009-11-23 12:32:47

标签: iphone linux http-headers png three20

我正在尝试将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体验,你可以看到。

2 个答案:

答案 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