PowerShell合成Gif动画

使用PowerShell合成Gif动画 1


在《PowerShell批量缩放图片》提到《使用PowerShell合成Gif动画》呼之欲出,现在来兑现这个承诺。

由于.NET的类的限制现在的脚本有两个缺点:

  1. 不能设置循环播放
  2. 不能设置之间的延迟

请单击图片放大图片看动画

PowerShell合成Gif动画

PowerShell合成Gif动画

贴上脚本:

<#
.Synopsis
   将多张图片合成一张Gif动画
.DESCRIPTION
   将多张图片合成一张Gif动画
.EXAMPLE
   $pngFiles = dir 'C:\Users\mosser\Pictures\test\*.png' | sort LastWriteTime
   ConvertTo-Gif -imageFiles $pngFiles  -outputFile a.gif
.NOTES
   作者: Mosser Lee
   原文链接: https://www.pstips.net/ConvertTo-Gif.html
#>
Function ConvertTo-Gif
{
    param
    (
      #输出图片文件集合
      [Parameter(Mandatory=$true,

                 Position=0)]
      [IO.FileInfo[]]$imageFiles,

      #输出图片路径
      [Parameter(Mandatory=$true, 
                 Position=1)]
      [IO.FileInfo]$outputFile
    )

    #参数处理
    if($imageFiles.Count -le 0)
    {
        Write-Error '输入的图片文件不能为空'
        return
    }
    if( -not $outputFile.Directory.Exists)
    {
        Write-Error '输出图片所在的文件夹不存在'
        return
    }
    if($outputFile.Extension -ne '.gif')
    {
        Write-Error '输出图片只能为Gif格式'
        return
    }

    #加载必要的Winform和WPF程序集
    @('System.Windows.Forms',
    'System.Drawing',
    'System.Xaml',
    'PresentationCore',
    'WindowsBase')  | foreach {
      Add-Type -AssemblyName $_
    }

    #定义GifBitmapEncoder
    $gifEn = New-Object System.Windows.Media.Imaging.GifBitmapEncoder
    foreach($imgFile in $imageFiles)
    {
        $img = [System.Drawing.Image]::FromFile($imgFile)
        $bitmap =  New-Object System.Drawing.Bitmap($img)
        $bitmapSource =[System.Windows.Interop.Imaging]::CreateBitmapSourceFromHBitmap(
         $bitmap.GetHbitmap(),
         [System.IntPtr]::Zero,
         [System.Windows.Int32Rect]::Empty,
         [System.Windows.Media.Imaging.BitmapSizeOptions]::FromEmptyOptions()

        )
        $gifEn.Frames.Add([System.Windows.Media.Imaging.BitmapFrame]::Create($bitmapSource))

        $img.Dispose()
        $bitmap.Dispose()
    }
    $fs=New-Object System.IO.FileStream($outputFile,'Create')
    $gifEn.Save($fs)
    $fs.Close()
}

#调用示例
$pngFiles = dir 'D:\Test\*.png' | sort LastWriteTime
ConvertTo-Gif -imageFiles $pngFiles  -outputFile 'ConvertTo-Gif.gif'
×用微信扫描并分享
本文链接: https://www.pstips.net/convertto-gif.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

一条评论 “使用PowerShell合成Gif动画

  • Guest

    ConvertTo-Gif : Cannot process argument transformation on parameter ‘imageFiles’. Cannot convert the “.idlerc” value of
    type “System.IO.DirectoryInfo” to type “System.IO.FileInfo”.
    At line:1 char:26
    + ConvertTo-Gif -imageFiles <<<< $img_files -outputFile "xxxx.gif"
    + CategoryInfo : InvalidData: (:) [ConvertTo-Gif], ParameterBindin…mationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,ConvertTo-Gif