2012-10-23 123 views
1

我試圖將專有ERP系統中的產品圖像導入OpenCart。使用PHP解碼XML文件中的base64圖像

到目前爲止(與堆棧溢出另一個答案的幫助下)我已經能夠單獨的文件中保存圖像與此代碼: http://pastebin.com/gv6M8QPT

示例XML文件看起來是這樣的: http://pastebin.com/k6Eq4Rpr

有3個標籤:

  • ID:在這種情況下, 「1000」
  • 文件名:在這種情況下,「sampleim age.jpg」
  • mediablob:這是bin.base64編碼圖像

而不是簡單地保存XML文件的我現在想做到以下幾點:

  1. 轉換的mediablob在XML文件到二進制映像文件
  2. 將映像文件保存爲<id>.jpg - 其中jpg基於<filename>標記中使用的擴展名創建。
+0

歡迎來到SO!你能告訴我們一些代碼嗎?你已經嘗試了什麼? – Spontifixus

+0

感謝您的評論。 @Sjoerd幫助我獲得編碼的文件,我只需要弄清楚如何使文件名正確。 http://pastebin.com/DymXqF5Z – user1768076

回答

1

下面是完整的解決方案。

$document = new DOMDocument(); 
$document->loadXML($xml); 
$dataNodes = $document->getElementsByTagName('mediablob'); 
foreach ($dataNodes as $node) { 
    // extract image 
    $base64 = $node->textContent; 
    // decode image 
    $bin = base64_decode($base64); 
    // get filename 
    $filenames=$node->parentNode->getElementsByTagName('filename'); 
    $filename=$filenames->item(0)->textContent; 
    // get ID 
    $ids=$node->parentNode->getElementsByTagName('id'); 
    $id=$ids->item(0)->textContent; 
    // get extension 
    $extension=preg_replace("/^.+(?=\\.[^\\.]+$)/","",$filename); 
    // save file 
    file_put_contents($id.$extension, $bin); 
} 
+0

非常感謝。完美的作品!非常好。也感謝所有幫助過他人的人。 – user1768076

1

嘗試像

<?php 
$im = file_get_contents('filename.gif'); 
$imdata = base64_encode($im); 
1
$document = new DOMDocument(); 
$document->loadXML($xml); 
$dataNodes = $document->getElementsByTagName('mediablob'); 
foreach ($dataNodes as $node) { 
    $base64 = $node->textContent; 
    $bin = base64_decode($base64); 
    file_put_contents('image.jpg', $bin); 
} 
+0

非常感謝,Sjoerd。我現在運行起來了,它從我的XML中保存了一個「image.jpg」文件。 這是我的計劃至今: http://pastebin.com/DymXqF5Z 爲了解決這個問題完全映像名稱不應該是「image.jpg的」,而是通過標籤的值創建的文件名 +稅號中使用的文件擴展名。因爲它可能並不總是jpg文件。 我該如何保存像thois這樣的文件? 感謝您的所有幫助! – user1768076