使用PHP解码XML文件中的base64图像

时间:2012-10-23 11:06:57

标签: php xml base64

我正在尝试将专有ERP系统中的产品图像转换为OpenCart。

到目前为止(在Stack Overflow的另一个答案的帮助下)我已经能够使用以下代码将图像保存在单独的文件中: http://pastebin.com/gv6M8QPT

示例XML文件如下所示: http://pastebin.com/k6Eq4Rpr

有3个标签:

  • id:在这种情况下为“1000”
  • filename:在本例中为“sampleimage.jpg”
  • mediablob:bin.base64编码图片

我现在想要执行以下操作,而不是简单地保存XML文件:

  1. 将XML文件中的mediablob转换为二进制图像文件
  2. 将图片文件另存为<id>.jpg - 根据jpg标记中使用的扩展名创建<filename>

3 个答案:

答案 0 :(得分:1)

尝试类似

的内容
<?php
$im = file_get_contents('filename.gif');
$imdata = base64_encode($im);   

答案 1 :(得分: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);
}

答案 2 :(得分: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);
}