0

我从屏幕截图中获得了一个 python Image 对象,我想将其保存在运行 PHP 的服务器上。
我想在不将图像保存在用户计算机上的情况下完成所有这些操作,因此我想向 PHP 脚本发送它可以理解的编码,我可以从 PIL Image 实例中获取该编码。

到目前为止,我已经尝试将图像保存到缓冲区(在 python 中)并将数据发送到 PHP 函数 file_put_contents,但生成的文件不是正确的 .png 图像(我刚刚将 PNG 编码字符串保存到扩展名为 .png 的文件...)

这是我的代码...

客户

# shot is an Image instance

buff = StringIO()
shot.save(buff, 'PNG')

args = {'filename':'eg.png','image': buff.getValue()}
data = urllib.urlencode(args)
request = urllib2.Request(self.uploadURL, data)
urllib2.urlopen(request).read()

服务器

# 'filename' arg ends in .png,  'image' arg is the upload parameter ^

$filename = 'images/'.$_POST['filename'];
file_put_contents($filename, $_POST['image']);

我认为在尝试将图像数据写入文件之前,我需要使用 PHP 转换它,但我不确定如何。

我之前通过将图像保存到文件并以 base 64 发送二进制内容来完成此操作,但我根本不希望将图像保存在客户端的计算机上。

谢谢!
免责声明:这个问题和我对编码的看法对我来说完全“恶心”,很抱歉成为如此巨大的菜鸟/可怕的误解。

4

2 回答 2

1

解决了

PHP 中的 UTF-8 编码发生了一些有趣的事情。
(使用utf8_encode功能不成功)

为了避免 UTF8,我对 UTF8 数据进行了 base64 编码并将其发送到 PHP 脚本,PHP 脚本对其进行解码并将其写入文件(以二进制模式)。

<?php

$filename = 'images/'.$_POST['filename'];

$fp = fopen($filename, 'wb');
fwrite($fp, base64_decode($_POST['image']));
fclose($fp);

?>
于 2013-02-27T04:35:45.717 回答
0

PHP 方面更复杂。我猜上传是通过 HTTP POST 文件完成的。如果是,则$_POST['image']不是上传文件的全部内容。请参阅http://www.php.net/manual/en/features.file-upload.post-method.phpmove_uploaded_file().

于 2013-02-26T12:58:25.243 回答