【问题标题】:Possible to extract Embedded image to a file?可以将嵌入式图像提取到文件中吗?
【发布时间】:2012-04-04 03:46:02
【问题描述】:

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

例如:

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

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

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

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

【问题讨论】:

    标签: image reporting-services


    【解决方案1】:

    两种方法详见this blog post

    1. 如果您需要在另一份报告中重复使用编码图像,请将其从一份报告复制到另一份报告中。
    2. 将报告副本导出到 Excel 并从电子表格中复制图像。

    或者,如果您需要更直接地访问图像,我发现 this utility 将解析 XML 并加载和导出图像。好像有源代码。

    【讨论】:

    • 谢谢,该实用程序运行良好。需要稍作改动以使其也适用于 rdlc 文件(包括文件打开对话框中的 *.rdlc 文件规范)。
    • 实用程序非常适合我。只需将打开文件对话框过滤器更改为“(.rdl)|.rdl|(.rdlc)|.rdlc”,即可打开 rdlc 文件。跨度>
    【解决方案2】:

    我创建了一个小的 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

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

    【讨论】:

    • 很棒的脚本,谢谢!如果您有多个包含名称相同但内容不同的图像的报告(例如“Header.png”),您可以通过将第 9 行更改为 $filename = [System.IO.Path]::GetFileNameWithoutExtension($reportFile) + '.' + $imagexml.Name + '.' + $imageextension; 将源报告名称作为图像名称的前缀
    【解决方案3】:
    1. 打开 XML(在记事本++ 或任何东西中)
    2. 寻找&lt;ImageData&gt;&lt;/ImageData&gt;标签
    3. 在标签之间复制 64 位编码字符串
    4. 找到将 x64 编码字符串转换为文件的实用程序。我用this website 下载了图片

    【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2010-09-15
      • 2023-04-06
      • 2020-11-06
      相关资源
      最近更新 更多