我从屏幕截图中获得了一个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转换图像数据,但我不确定如何。
我之前通过将Image保存到文件并在base 64中发送二进制内容来完成此操作,但我不希望将Image保存在客户端的计算机上。
谢谢!
免责声明:这个问题和我对编码的看法对我来说感觉完全'icky',很抱歉这是一个巨大的菜鸟/可怕的误解。
答案 0 :(得分:1)
<强>解决强>
在PHP中使用UTF-8编码发生了一些有趣的事情
(使用utf8_encode
功能未成功)
为了避免使用UTF8,我对UTF8数据进行了base64编码并将其发送到PHP脚本,该脚本将其解码并将其写入文件(以二进制模式)。
<?php
$filename = 'images/'.$_POST['filename'];
$fp = fopen($filename, 'wb');
fwrite($fp, base64_decode($_POST['image']));
fclose($fp);
?>
答案 1 :(得分:0)
PHP方面更复杂。我猜这个上传是用HTTP POST文件完成的。如果是,则$_POST['image']
不是上传文件的全部内容。请参阅http://www.php.net/manual/en/features.file-upload.post-method.php和move_uploaded_file()
。