2013-03-16 34 views
1

我試圖使用下面的代碼CakePHP的:讓圖像從MySQL BLOB到iOS

$this->autoRender=false; 
$blob = $this->GeneralNews->findById($id,array("image_data")); 
$image = imagecreatefromstring($blob["GeneralNews"]["image_data"]); 

ob_start(); //You could also just output the $image via header() and bypass this buffer capture. 
imagejpeg($image, null, 80); 
$data = ob_get_contents(); 
ob_end_clean(); 

echo '<img src="data:image/jpg;base64,' . base64_encode($blob["GeneralNews"]["image_data"]) . '" />'; 

結果可能在未來的URL被視爲從數據庫中獲得的圖像 http://www.thedarkdimension.com/generalNews/displayImage/1678

但是當我嘗試在

NSData * imageData = [NSData dataWithContentsOfURL:imageURL];   
UIImage * image = [UIImage imageWithData:imageData]; 

,我得到的是空雖然在(爲imageData)

數據的圖像通過的iOS得到這個

我不知道這個問題,但它最有可能來自PHP方面..因爲我試過這個URL http://www.johnquarto.com/wp-content/uploads/2008/08/gag.jpg 它可以與它。

回答

0

已經很快看了看起來,從URL http://www.thedarkdimension.com/generalNews/displayImage/1678返回的內容不是圖像而是聲明爲「text/html」類型的文檔。該文檔實際上並不是有效的HTML,但只包含一個單一的img標記,其source屬性是base64編碼的圖像。鑑於您的PHP代碼,這是有道理的。

我懷疑imageWithData正在尋找什麼,但只是它的所有二進制良好的JPEG。

因此,您需要更改您的PHP以將MIME類型設置爲image/jpeg,然後僅按照原樣回顯jpeg數據 - 不需要base64編碼。我沒有看過PHP這麼久,我不敢給你示例代碼,但希望這足以讓你去。

+0

這似乎是答案的一部分。爲了幫助OP實現這一點,請查看CakePHP'Response'對象,瞭解如何使用CakePHP提供原始圖像數據; http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-files隨時在您的回答中包含此內容 – thaJeztah 2013-03-16 13:36:44