使用imagecreatefromstring PHP中的图像

时间:2011-08-01 22:46:18

标签: php iphone image upload

所以我有一个iphone应用程序,它将图像上传到我的网络服务器,我环顾四周,人们似乎做了类似的事情

$data = file_get_contents($_FILES['file']['tmp_name']);
$image = imagecreatefromstring($data);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

我查看了php文档,但我仍然不明白header()的作用;它会将图像转换为我想要的任何格式吗?

对于imagepng(),输出的图像在哪里?记忆?这就是为什么我需要imagedestroy()?

我会把它放在哪里

move_uploaded_file()

提前致谢!

3 个答案:

答案 0 :(得分:2)

此代码旨在作为输出返回图像 - 您可以将其用作图像标记的有效src。也就是说,你可以这样做:

<img src="thatfile.php?something=1" />

标题告诉浏览器服务器要发送的数据是图像(特别是PNG图像)。

在您的示例代码中,文件实际上从未在任何地方写入:数据保留在内存中直到脚本结束,然后它就被“遗忘”了。 imagedestroy释放内存并且是很好的做法,但实际上没有必要,因为在请求结束后内存将被垃圾收集。如果要将图像保留在文件中,则必须使用其中一个相关功能,例如imagepnghttp://www.php.net/manual/en/function.imagepng.php。在您的示例代码中写入或不写入文件之间的唯一区别是缺少imagepng的第二个参数 - 第二个参数将是所需的文件路径。

阅读有关这整个主题的文档将有助于牢固掌握这些功能如何工作以及各自的功能。文档页面上有大量演示,可以显示这一点。

答案 1 :(得分:1)

此特定示例通过POST从$_FILES数组获取图像,并将其简单输出回浏览器。 header用于通知浏览器以下内容是PNG图像。

由于您从字符串创建图像,因此它没有“扩展名”。此时它只是一个图像资源。您可以使用imagepngimagejpeg或任何其他方法从中创建实际文件,以将图像资源保存到文件中。您自己决定该阶段的扩展名(和文件名)。

E.g:

imagepng($image, 'path/to/file.png');

  

我会把move_uploaded_file()放在哪里?

由于您没有上传的文件,因此您不会只使用字符串。

答案 2 :(得分:0)

标题纯粹是服务器让浏览器知道“哦,嘿,这是一个png图像,请渲染它”

imagepng将其编码为png格式并“打印”到输出

imagedestroy释放图像资源占用的内存。

如果您需要强制扩展,可以使用mod_rewrite

以下是我.htaccess

中几行的示例
RewriteEngine on
RewriteRule images/000000/00FF00/newmyinfo.jpg images/newmyinfo.php?bgcolor=000000&color=00ff00  [L]

希望这有帮助!