2012-10-23 124 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