Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Possible to extract Embedded image to a file?

Given a SSRS report definition file with an embedded image in it, just wondering if its possible to extract that image XML to recreate the original image file.

e.g. :

inside the rdlc file, you might see xml like this :

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

Is it possible to take the ImageData, and transform form it in some way to re-create the original image bitmap byte stream ?

(This might be useful in cases such as when you've lost the original image file on which the embedded image was based.)

like image 280
Moe Sisko Avatar asked Apr 04 '12 03:04

Moe Sisko


2 Answers

  1. Open the XML (in notepad++ or anything)
  2. Look for the <ImageData></ImageData> tags
  3. Copy the 64-bit encoded string between the tags
  4. Find a utility to convert x64 encoded strings to files. I used this website and downloaded the image
like image 117
Conner Avatar answered Jan 02 '23 19:01

Conner


I have created a small Power Shell script to solve this problem:

$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

This script extracts all images from all reports in the current folder.

like image 26
Fabian Avatar answered Jan 02 '23 20:01

Fabian