在HTML文件中动态插入图像

时间:2014-12-25 17:01:08

标签: powershell

我尝试在我的HTML文件中动态插入图像,当我动态地说它意味着用户会询问时,这里有两个我想象的approce,对于这两种情况用户必须在运行代码之前将图像放在特定的文件夹中。

通过开关参数如:generate-html -includeImages,如果switch param为true,则转换MyImagefolder中的所有图像,并在我的输出中逐个插入。

通过接受多个值的参数,在这种情况下,用户必须输入图像名称,如generate-html -includeImages image1.gif, image2.gif

这里是我用来将一个图像插入HTML文件的代码:

$PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
$image = "$PSScriptRoot\img.gif"
$ImageBits = [Convert]::ToBase64String((Get-Content $image -Encoding Byte))
$ImageHTML = "<img src=data:image/png;base64,$($ImageBits) alt='My Image'/>"

然后我在我的convertto-html命令中插入我的变量。

ConvertTo-Html -Body $style -PreContent "$imageHTML" | Out-File "$PSScriptRoot\report.html"

1 个答案:

答案 0 :(得分:4)

可以像这样处理一系列图像:

$images = Get-ChildItem "C:\path\to\*.gif"
$ImageHTML = $images | % {
  $ImageBits = [Convert]::ToBase64String((Get-Content $_ -Encoding Byte))
  "<img src=data:image/png;base64,$($ImageBits) alt='My Image'/>"
}

是否要使用开关-IncludeImage并从预定义文件夹中读取图像或通过-IncludeImage参数传递图像路径取决于您。后者可能是更通用的方法,因为它使您的代码独立于特定文件夹,但这两种方法都有效。

使用switch参数的函数可能如下所示:

function Generate-Html {
  Param(
    [Switch]
    [bool]$IncludeImages
  )

  if ($IncludeImages) {
    $PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
    $images = Get-ChildItem "$PSScriptRoot\*.gif"
    $ImageHTML = $images | % {
      $ImageBits = [Convert]::ToBase64String((Get-Content $_ -Encoding Byte))
      "<img src=data:image/png;base64,$($ImageBits) alt='My Image'/>"
    }

    ConvertTo-Html -Body $style -PreContent $imageHTML |
      Out-File "$PSScriptRoot\report.html"
  }
}

虽然使用数组参数的函数可能如下所示:

function Generate-Html {
  Param(
    [Parameter()]
    [string[]]$IncludeImages
  )

  if ($IncludeImages) {
    $ImageHTML = $IncludeImages | % {
      $ImageBits = [Convert]::ToBase64String((Get-Content $_ -Encoding Byte))
      "<img src=data:image/png;base64,$($ImageBits) alt='My Image'/>"
    }

    ConvertTo-Html -Body $style -PreContent $imageHTML |
      Out-File "C:\path\to\report.html"
  }
}