使用PHP在服务器上保存PIL生成的PNG图像
我有一个从屏幕截图得到的Python图像对象,想把它保存到一个运行PHP的服务器上。
我希望这一切都不在用户的电脑上保存图像,所以我想把一个编码发送给PHP脚本,这个编码是我可以从PIL图像实例中获取的。
到目前为止,我尝试把图像保存到一个缓冲区(在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格式发送二进制内容来做到这一点,但我完全不想在客户端的电脑上保存图像。
谢谢!
免责声明:这个问题和我对编码的理解让我觉得很不舒服,所以抱歉我这么菜/理解得这么糟糕。
2 个回答
0
PHP这边的事情比较复杂。我猜上传是通过HTTP POST方式来进行的。如果真是这样的话,$_POST['image']
并不是上传文件的全部内容。你可以查看这个链接了解更多信息:http://www.php.net/manual/en/features.file-upload.post-method.php,还有move_uploaded_file()
这个函数。
1
已解决
在PHP中,UTF-8编码出现了一些奇怪的问题。
(使用utf8_encode
这个函数没有成功)
为了避免使用UTF-8,我把UTF-8的数据进行了base64编码,然后把它发送到PHP脚本,脚本再解码这些数据并以二进制模式写入文件。
<?php
$filename = 'images/'.$_POST['filename'];
$fp = fopen($filename, 'wb');
fwrite($fp, base64_decode($_POST['image']));
fclose($fp);
?>