我需要将批量的TIFF图像转换为JPEG。可以使用普通的PowerShell来完成,而无需安装ImageMagick吗?
经过一些研究here和here后,似乎可以做到。首先,通过加载.NET Framework程序集:
[Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”);
但是,由于我将转换后的图像保存在不同的目录中,删除文件名的前四个字符,并将扩展名更改为jpg,我仍然坚持语法:
Get-ChildItem *.tif | %{ $file = new-object System.Drawing.Bitmap($_.FullName); $file.Save({ Join-Path "C:\Users\oscar\Downloads\" ($_.Name -replace '^.{4}(.*?)', '$1.jpg') },"JPEG") }
我在路径名中收到了#34;无效字符"错误。
答案 0 :(得分:0)
我不确定您的问题是在转换中还是创建新文件名。如果文件名创建是问题,您可以尝试以下。例如:
PS C:\temp> "test.txt" -replace "txt", "somethingOther"
在你的情况下:
Get-ChildItem -Include *.tif | %{ $file = new-object System.Drawing.Bitmap($_.FullName); $file.Save(( Join-Path "C:\Users\oscar\Downloads\" ($_.Name -replace "tif", 'jpg') ),"JPEG") }
我还用正常的(Join-Path
)替换了大括号。
希望有所帮助
答案 1 :(得分:0)
在解释事情时,我不喜欢一个衬垫
此脚本包含新文件名所需的.substring(4)
:
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$DestDir = "C:\Users\oscar\Downloads\"
$SrcDir = "X:\test\path"
PushD $SrcDir
Get-ChildItem *.tif |
ForEach-Object{
$NewFileName = ( Join-Path $DestDir ($_.BaseName.SubString(4)+'.jpg' ))
$Picture = new-object System.Drawing.Bitmap($_.FullName)
$Picture.Save($NewFileName ,"JPEG")
}
PopD