使用PHP在服务器上保存PIL生成的PNG图像

使用PHP在服务器上保存PIL生成的PNG图像,php,python,image,encoding,python-imaging-library,Php,Python,Image,Encoding,Python Imaging Library,我有一个屏幕截图中的python图像对象,我想保存在运行PHP的服务器上。 我想在不保存用户计算机上的图像的情况下完成所有这一切,因此我想发送PHP脚本一个它可以理解的编码,我可以从PIL图像实例中获得该编码 到目前为止,我已经尝试将图像保存到缓冲区(用python)并将数据发送到PHP函数文件\u put\u contents,但结果文件不是正确的.png图像(我刚刚将png编码字符串保存到扩展名为.png的文件中…) 这是我的密码 客户端 # shot is an Image instanc

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

到目前为止,我已经尝试将图像保存到缓冲区(用python)并将数据发送到PHP函数文件\u put\u 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转换图像数据,但我不确定如何转换

我之前已经将图像保存到文件中,并在Base64中发送二进制内容,但我根本不希望将图像保存到客户端计算机上

谢谢

免责声明:这个问题和我对编码的看法让我觉得很“讨厌”,很抱歉,我对这个问题产生了巨大的误解。

PHP方面更为复杂。我猜上传是通过HTTP POST文件完成的。如果是,则
$\u POST['image']
不是上载文件的全部内容。请参阅并
移动上传的文件()

已解决

在PHP中使用UTF-8编码时发生了一些有趣的事情。
(使用
utf8\u编码
功能未成功)

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



遵循此链接可能会对您有所帮助。@Anup我真的不想在他们的计算机上保存图像,即使只是暂时的。我只是不相信它是必需的(或者是一个好的解决方案)。我检查了您的解决方案的Python方面,它似乎起了作用:它应该提供给
upload()
整个PNG数据。您需要检查服务器端真正传输和接收的内容。如果用文本编辑器打开最后一个.png文件,它会是什么样子?@Armin@antierearth,嗯,在我看来这是一个有效的png图像。但是你不能在图像查看器中打开它?
<?php

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

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

?>