2013-02-26 68 views
0

我從屏幕截圖中獲取了一個python圖像對象,我想將它保存在運行PHP的服務器上。
我想完全沒有在用戶的計算機上保存圖像,所以我想發送PHP腳本的一個編碼,它可以瞭解哪些可以從PIL圖像實例中獲得。到目前爲止,我已經嘗試將圖像保存到緩衝區(在Python中)並將數據發送到PHP函數file_put_contents,但生成的文件不是正確的.png圖像(我剛剛保存了PNG編碼字符串與.png文件擴展名的文件......)使用PHP在服務器上保存PIL生成的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轉換圖像數據之前,我嘗試將其寫入文件,但我不知道如何。

我之前通過將圖像保存到文件併發送基於64位的二進制內容完成此操作,但我不希望將該圖像保存在客戶機的計算機上。

謝謝!
免責聲明:這個問題和我對編碼的感覺對我來說完全是'icky',所以很抱歉成爲這樣一個巨大的noob /可怕的誤解。

+0

請點擊此鏈接http://stackoverflow.com/questions/7877282/how-to-send-image-generated-by-pil-to-browser可能對你的幫助。 – Anup 2013-02-26 12:41:37

+0

@Anup我真的不想將圖像保存在他們的電腦上,即使只是暫時的。我簡直不相信它是必需的(或者一個好的解決方案) – 2013-02-26 12:45:37

+0

我檢查了你的解決方案的Python方面,它似乎工作:它應該給'上傳()'整個PNG數據。您需要檢查服務器端真正傳輸和接收的內容。如果使用文本編輯器打開最終的.png文件,它的外觀如何? – 2013-02-26 12:51:43

回答

1

解決

一些有趣的業務與PHP中的UTF-8編碼發生。
(使用utf8_encode功能未成功)

爲了避免UTF8,我base64編碼的UTF8數據並將其發送到PHP腳本,它解碼,並將其寫入文件(二進制模式)。

<?php 

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

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

?> 
相關問題