在《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