0

PHPを実行しているサーバーに保存したいスクリーンキャプチャからのPythonImageオブジェクトがあります。
ユーザーのコンピューターに画像をまったく保存せずにこれらすべてを実行したいので、PILImageインスタンスから取得できるエンコードをPHPスクリプトに送信します。

これまで、画像をバッファ(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でバイナリコンテンツを送信することでこれを実行しましたが、クライアントのコンピューターにイメージを保存したくありません。

ありがとう!
免責事項:この質問とエンコーディングに関する私の認識は、私には完全に「不快」に感じます。そのため、このような巨大な初心者/恐ろしい誤解であることに申し訳ありません。

4

2 に答える 2

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);

?>
于 2013-02-27T04:35:45.717 に答える
0

PHP側はもっと複雑です。アップロードはHTTPPOSTファイルで行われていると思います。そうである場合は$_POST['image']、アップロードされたファイルのコンテンツ全体ではありません。http://www.php.net/manual/en/features.file-upload.post-method.phpおよびを参照してくださいmove_uploaded_file()

于 2013-02-26T12:58:25.243 に答える