【问题标题】:Saving a PIL generated PNG Image on a server with PHP使用 PHP 在服务器上保存 PIL 生成的 PNG 图像
【发布时间】:2013-02-26 12:27:48
【问题描述】:

我从屏幕截图中获得了一个 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 发送二进制内容来完成此操作,但我根本不希望将图像保存在客户端的计算机上。

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

【问题讨论】:

  • 点击此链接stackoverflow.com/questions/7877282/…可能对您有所帮助。
  • @Anup 我真的不想将图像保存在他们的计算机上,即使只是暂时的。我根本不相信它是必需的(或一个好的解决方案)
  • 我检查了您解决方案的 Python 方面,它似乎工作:它应该将整个 PNG 数据提供给 upload()。您需要检查服务器端真正发送和接收的内容。如果您使用文本编辑器打开最终的 .png 文件,它会是什么样子?
  • @AntiEarth 呃,对我来说这看起来像是一个有效的 PNG 图像。但是不能在图片查看器中打开?

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


【解决方案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);

?>

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多