2014-09-02 101 views
0

美好的一天。有人能幫我解決我的問題嗎?我是新的Python和PHP。我想發送base64編碼的圖像到我的php服務器。但我不知道我的PHP腳本會發生什麼。Python - PHP將base64保存到圖像

編碼的數據正確地發送到php腳本並將newImage.jpg保存到目錄c:/image/newImage.jpg。但是,當我嘗試預覽newImage.jpg,它說「Windows照片查看器無法打開此圖片,因爲該文件似乎已損壞,損壞或是很大」

問題是我如何保存圖像正常。 任何意見和建議,非常感謝。

對不起,我的英語。謝謝。

PHP腳本:

<?php 
    $encodedString = str_replace(' ','+',$_POST['test']); 
    $decoded=base64_decode($encodedString); 
    file_put_contents('c:/image/1/newImage.JPG',$decoded); 
?> 

Python腳本:

import urllib 
import urllib2 
from urllib import urlencode 

url = 'http://192.168.5.165/server/php/try2.php' 
encoded = urllib.quote(open("c:/image/1.jpg", "rb").read().encode("base64")) 

data = {'test': encoded} 
encoded_data = urlencode(data) 

website = urllib2.urlopen(url, encoded_data) 
print website.read() 

回答

0

在你需要urldecode()$_POST['test']數據你的PHP代碼,然後base64_decode()它。你不需要用'+'替換空格(無論如何都是反向的)。

在Python中,你只需要urlencode(),你也不需要urllib.quote()

所以你的PHP可以是:

<?php 
    $decoded = base64_decode(urldecode($_POST['test'])); 
    file_put_contents('c:/image/1/newImage.JPG',$decoded); 
?> 

而Python代碼:

import urllib 
import urllib2 
from urllib import urlencode 

url = 'http://192.168.5.165/server/php/try2.php' 
encoded = open("c:/image/1.jpg", "rb").read().encode("base64") 

data = {'test': encoded} 
encoded_data = urlencode(data) 

website = urllib2.urlopen(url, encoded_data) 
print website.read() 
0

我是一個懶惰的傢伙,但我會幫助改變這個在php

<?php 
    $encodedString = str_replace(' ','+',$_POST['test']); 
    $decoded=base64_decode($encodedString); 
    $decoded=imagecreatefromstring($decoded); 
    imagejpg($decoded, "temp.jpg"); 
    copy("temp.jpg",'c:/image/1/newImage.JPG'); 
?> 

這個問題很簡單,你試圖把一個還沒有成爲圖像的對象保存到一個文件中,所以首先讓它把圖像設置爲一個臨時圖像e,然後將其複製到您想要的位置。

相關問題