可以将嵌入图像提取到文件中吗?

时间:2012-04-04 03:46:02

标签: image reporting-services

给定一个带有嵌入图像的SSRS报告定义文件,只是想知道是否可以提取该图像XML来重新创建原始图像文件。

e.g。 :

在rdlc文件中,你可能会看到像这样的xml:

<EmbeddedImage Name="tick">
  <MIMEType>image/bmp</MIMEType>
  <ImageData>Qk1mAwAAAAAAADYAAAAoAAAAEAAAABEAAAABABgA ... <<REST OF IMAGE HERE>>
  </ImageData>
</EmbeddedImage>

是否可以获取ImageData,并以某种方式转换形式以重新创建原始图像位图字节流?

(在您丢失嵌入图像所基于的原始图像文件时,这可能很有用。)

4 个答案:

答案 0 :(得分:17)

this blog post中详述了两种方法:

  1. 如果您需要在那里重复使用,请将编码图像从一个报告复制到另一个报告。
  2. 将报告的副本导出到Excel并从电子表格中复制图像。
  3. 或者,如果您需要更直接地访问图像,我发现this utility将解析XML并加载和导出图像。看起来像源代码。

答案 1 :(得分:7)

我已经创建了一个小的Power Shell脚本来解决这个问题:

$ErrorActionPreference = 'Stop';
Get-ChildItem -Filter '*.rdl' | ForEach {
    $reportFile = $_;
    Write-Host $reportFile;
    $report = [xml](Get-Content $reportFile);
    $report.Report.EmbeddedImages.EmbeddedImage | Foreach {
        $imagexml = $_;
        $imageextension = $imagexml.MIMEType.Split('/')[1];
        $filename = $imagexml.Name + '.' + $imageextension;
        Write-Host '->' $filename;
        $imageContent =  [System.Convert]::FromBase64String($imagexml.ImageData);
        Set-Content -Path $filename -Encoding Byte -Value $imageContent;
    }
}

https://gist.github.com/Fabian-Schmidt/71746e8e1dbdf9db9278

此脚本从当前文件夹中的所有报告中提取所有图像。

答案 2 :(得分:1)

我只需要这样做,并意识到可以剪切和粘贴嵌入的图像,即使无法复制和粘贴。

答案 3 :(得分:1)

  1. 打开XML(在记事本或其他任何工具中)
  2. 寻找<ImageData></ImageData>标签
  3. 在标签之间复制64位编码的字符串
  4. 找到一个实用程序,将x64编码的字符串转换为文件。我使用this website并下载了图片