PowerShell · 20.09.2024

Картинка в картинке

Не так давно в общей папке образовалась добротная коллекция изображений формата webp, которые для всеобщего счастья необходимо было превратить в jpg. Знания заклинаний и азов алхимии для таких чудес не потребовалось, а вот ещё один ps1-скрипт в копилку сайта всё-таки упал.

Для работы с форматом webp есть отличная библиотека libwebp. В её состав входит целая куча утилит, но конкретно для конвертации в jpg нам потребуется только утилита dwebp.exe.

В моём случае, никаких проблем с открытием формата webp не наблюдалось, но если возникнут какие-то сложности — установите кодек (репозиторий здесь).

Чтобы не тратить время на путешествия по сайту разработчиков и ручное скачивание программы, я описал всю эту рутину прямо в скрипте:

# Заголовок скрипта #
[System.Console]::Title = "WEBP2JPG"

# Установка протокола #
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# Импорт модуля в сессию скрипта #
Import-Module -Name BitsTransfer -Force

# Переменные #
$liblink = "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.3.2-windows-x64.zip"
$zipname = "libwebp.zip"
$libname = "dwebp.exe"
$imgdir = "$PSScriptRoot\jpg"
$testpath = Test-Path -Path $libname -PathType Leaf

# Скачивание файла dwebp из библиотеки libwebp #
if (!$testpath)
{
    Start-BitsTransfer -Source $liblink -Destination $zipname
    Expand-Archive -Path $zipname -DestinationPath $PSScriptRoot -Force
    Get-ChildItem -Path $PSScriptRoot -Recurse -Filter $libname | Move-Item -Destination "$PSScriptRoot\$libname"
    Remove-Item -Path *lib* -Recurse -Force
}

# Создание папки для файлов jpg #
New-Item -Path $imgdir -ItemType Directory -Force -ErrorAction Ignore | Out-Null

# Конвертация webp в jpg #
$images = Get-ChildItem -Path $PSScriptRoot -Filter "*.webp"
foreach ($image in $images)
{
    $filename = $imgdir + "\" + $image.BaseName + ".jpg"
    Start-Process -FilePath $libname -ArgumentList "-quiet $image -o $filename" -NoNewWindow
}

Всё, что вам нужно сделать, это разместить файлы webp в папке со скриптом и запустить его. PS1 автоматически скачает утилиту, создаст папку для файлов jpg и проведет конвертацию. Конечно, если dwebp.exe будет обнаружен в папке, то ничего скачивать не потребуется, и преобразование начнется сразу. Однако стоит учесть, что dwebp.exe не поддерживает пути с пробелами.

На момент написания скрипта последней версии кодека являлась указанная 1.3.2. На данный момент в репозитории доступна версия 1.4.0. Можете внести соответствующие изменения в переменную $liblink. Ну, или оставить всё как есть.