Image 是否可以将嵌入图像提取到文件?
给定一个包含嵌入图像的SSRS报告定义文件,只是想知道是否可以提取该图像XML来重新创建原始图像文件 e、 g: 在rdlc文件中,您可能会看到如下xml:Image 是否可以将嵌入图像提取到文件?,image,reporting-services,Image,Reporting Services,给定一个包含嵌入图像的SSRS报告定义文件,只是想知道是否可以提取该图像XML来重新创建原始图像文件 e、 g: 在rdlc文件中,您可能会看到如下xml: <EmbeddedImage Name="tick"> <MIMEType>image/bmp</MIMEType> <ImageData>Qk1mAwAAAAAAADYAAAAoAAAAEAAAABEAAAABABgA ... <<REST OF IMAGE HERE&g
<EmbeddedImage Name="tick">
<MIMEType>image/bmp</MIMEType>
<ImageData>Qk1mAwAAAAAAADYAAAAoAAAAEAAAABEAAAABABgA ... <<REST OF IMAGE HERE>>
</ImageData>
</EmbeddedImage>
图像/bmp
QK1mawaaaaaaadayaaaaaaaaaaaaaaaaaaaaaaaaaaaaababga。。。
是否可以获取图像数据,并以某种方式对其进行转换,以重新创建原始图像位图字节流
(这在丢失嵌入图像所基于的原始图像文件时可能很有用。)中详细介绍了两种方法:
或者,如果您需要更直接地访问图像,我发现这将解析XML并加载和导出图像。看起来源代码可用。我只需要执行此操作,并意识到可以剪切和粘贴嵌入的图像,即使无法复制和粘贴。我创建了一个小型的powershell脚本来解决此问题:
$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;
}
}
此脚本从当前文件夹中的所有报告中提取所有图像
标记谢谢,这个工具工作得很好。为了使它也适用于rdlc文件(包括文件打开对话框中的*.rdlc filespec),需要做一点小小的修改。只需将“打开文件”对话框过滤器更改为“(.rdl)|.rdl |(.rdlc)|.rdlc”,即可打开rdlc文件。脚本很棒,谢谢!如果您有多个包含名称相同但内容不同(例如“Header.png”)的图像的报表,您可以通过将第9行更改为
$filename=[System.IO.Path]::GetFileNameWithoutExtension($reportFile)+'.+$imagexml.name+'.+$imageextension,将源报表名称作为图像名称的前缀代码>这个网站更好。我无法使用您建议的站点提取图像。