Windows系统批量变换文件夹里的图片为低像素

使用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文件,实现批量修改

猜你喜欢

转载自blog.csdn.net/weixin_56337147/article/details/130754407