在《PowerShell批量缩放图片》提到《使用PowerShell合成Gif动画》呼之欲出,现在来兑现这个承诺。
由于.NET的类的限制现在的脚本有两个缺点:
- 不能设置循环播放
- 不能设置之间的延迟
请单击图片放大图片看动画
贴上脚本:
<#
.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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!


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