使用powershell批量裁剪图片,文件夹里的图片批量裁剪成指定大小,保存到另一个文件夹中。
编写运行.ps1文件
新建文本文档,输入如下内容:
# 指定原始图片所在的文件夹和输出路径
$sourceFolder = "C:\path\to\source\folder"
$outputFolder = "C:\path\to\output\folder"
# 加载System.Drawing命名空间
Add-Type -AssemblyName System.Drawing
# 获取指定文件夹中所有图片的文件名
$files = Get-ChildItem -Path $sourceFolder -Filter *.jpg
# 循环处理每个文件
foreach ($file in $files) {
# 打开原始图片
$image = [System.Drawing.Image]::FromFile($file.FullName)
# 定义新的大小
$newWidth = 100
$newHeight = ($image.Height / $image.Width) * $newWidth
$newSize = New-Object System.Drawing.Size($newWidth, $newHeight)
# 创建一个新的Bitmap并绘制调整大小后的图片
$resizedImage = New-Object System.Drawing.Bitmap($newSize.Width, $newSize.Height)
$graphics = [System.Drawing.Graphics]::FromImage($resizedImage)
$graphics.DrawImage($image, 0, 0, $newSize.Width, $newSize.Height)
# 保存调整大小后的图片到指定输出路径
$outputPath = Join-Path $outputFolder $file.Name
$resizedImage.Save($outputPath)
# 释放资源
$image.Dispose()
$resizedImage.Dispose()
$graphics.Dispose()
}
路径根据情况修改。保存为“.ps1”为后缀的文件,如“111.ps1”。打开powershell,在“111.ps1”的路径下输入“ .\111.ps1”,执行该文件。
成功运行
效果:1080*2400的图片压缩为100*222的
代码解释(不重要,建议跳过)
GPT给出的相关代码解释:
好的,下面是代码的解释:
```
# 加载System.Drawing命名空间
Add-Type -AssemblyName System.Drawing
```此处的代码使用了 PowerShell 的 `Add-Type` 命令来加载 `System.Drawing` 命名空间。`System.Drawing` 命名空间是 .NET Framework 中用于绘制二维图形的核心组件之一。在 PowerShell 脚本中,如果你想要处理图片,需要先加载该命名空间。
```
# 定义新的大小
$newWidth = 500
$newHeight = ($image.Height / $image.Width) * $newWidth
$newSize = New-Object System.Drawing.Size($newWidth, $newHeight)
```这段代码定义了新的图片大小。我们以宽度为500像素为例,根据原始图片的长宽比例计算出新的高度,然后使用 `System.Drawing.Size` 类型创建一个新的 `Size` 对象。
```
# 创建一个新的Bitmap并绘制调整大小后的图片
$resizedImage = New-Object System.Drawing.Bitmap($newSize.Width, $newSize.Height)
$graphics = [System.Drawing.Graphics]::FromImage($resizedImage)
$graphics.DrawImage($image, 0, 0, $newSize.Width, $newSize.Height)
```这段代码使用 `System.Drawing.Bitmap` 类型创建一个新的 Bitmap 对象,然后使用 `System.Drawing.Graphics` 类型创建一个与该 Bitmap 关联的 Graphics 对象。随后,我们使用 `DrawImage()` 方法将调整大小后的图片绘制到该 Bitmap 上。
```
# 保存调整大小后的图片到指定输出路径
$outputPath = Join-Path $outputFolder $file.Name
$resizedImage.Save($outputPath)
```这段代码将调整大小后的图片保存到指定输出路径。我们使用 PowerShell 的内置 `Join-Path` 命令来拼接输出文件夹和原始图片的文件名,然后使用 Bitmap 对象的 `Save()` 方法将 Bitmap 保存为图片文件。
```
# 释放资源
$image.Dispose()
$resizedImage.Dispose()
$graphics.Dispose()
```最后,这段代码调用了每个 Bitmap 对象的 `Dispose()` 方法,以释放与该对象相关的所有资源,确保内存不会泄露。注意,我们需要按照以下顺序释放资源:先释放 Graphics 对象,然后释放 Bitmap 对象,最后释放 Image 对象 (即原始图片)。
报错
图片位深度变化
可以通过显式指定 PixelFormat 参数来保持输出的图像格式不变。
在创建新的 Bitmap 对象时,显式指定了 PixelFormat 参数为 Format24bppRgb,以保持输出图像的位深度不变。同时,也需要在保存图像时指定格式为 JPEG,以确保输出的图像格式正确。
在
$resizedImage =New-Object System.Drawing.Bitmap($newSize.Width, $newSize.Height, [System.Drawing.Imaging.PixelFormat]::Format24bppRgb)
一处修改。
效果:
其他报错
powershell运行指令,常出现的报错及处理参见:
Windows系统powershell运行指令常见报错及处理_weixin_56337147的博客-CSDN博客
总结
编写运行.ps1文件,实现批量修改