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

时间:2013-02-26 12:27:48

标签: php python image encoding python-imaging-library

我从屏幕截图中获得了一个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',很抱歉这是一个巨大的菜鸟/可怕的误解。

2 个答案:

答案 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.phpmove_uploaded_file()