2014-12-25 3 views
-1

Я пытаюсь динамически вставлять изображения в свой HTML-файл, когда я говорю динамически, это означает, что когда пользователь попросит пользователя, вот 2, я полагаю, для обоих случаев пользователь должен перед запуском кода поместите изображения в определенную папку.Динамически вставлять изображения в HTML-файл

С помощью параметра switch like: generate-html -includeImages, если параметр switch равен 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" 
+0

Итак, что ваш вопрос здесь? –

+0

Мой вопрос: как я могу динамически вставлять одно или несколько изображений на мою страницу html? У меня есть 2 подхода в голове, но я понятия не имею, как это реализовать. Если у вас есть идея, я могу понять, что это будет приветствоваться. Спасибо – kekimian

ответ

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 параметр зависит от вас. Последнее, вероятно, более универсальный подход, поскольку он делает ваш код независимым от конкретной папки, но оба подхода будут работать.

Функция с помощью параметра переключения может выглядеть следующим образом:

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" 
    } 
} 
+0

Большое спасибо за эти примеры. Но, к сожалению, это не сработает. Я получаю сообщение об ошибке для каждого изображения в папке: – kekimian

+0

Get-Content: Не удается найти путь «C: \ windows \ system32 \ image.bmp», потому что его не существует. – kekimian

+0

Вызов исключения «ToBase64String» с аргументом «1»: «Значение не может быть пустым. Имя параметра: inArray« – kekimian

Смежные вопросы