如何修改现有PowerShell代码实现bmp、jpg等图片按坐标切片并保存各分片
PowerShell 图片切片工具调整方案
以下是适配批量切片需求的完整可运行代码,支持bmp、jpg、png等常用格式导入导出,可自定义多个切片坐标:
Add-Type -AssemblyName System.Drawing # --------------- 可配置参数开始 --------------- # 原图片路径,支持bmp/jpg/jpeg/png等常见格式 $sourceImagePath = "C:\tmp\dolphin.jpg" # 切片输出文件夹,不存在会自动创建 $outputDir = "C:\tmp\slices" # 切片配置:每组参数为 【源图起始X, 源图起始Y, 切片宽度, 切片高度, 输出文件名】 $sliceConfigs = @( @(0, 0, 64, 64, "slice_0_0.jpg"), @(0, 64, 64, 64, "slice_0_64.png"), @(64, 0, 64, 64, "slice_64_0.bmp") # 需更多切片继续按上面格式添加即可 ) # --------------- 可配置参数结束 --------------- # 初始化输出目录 if (-not (Test-Path $outputDir)) { New-Item -ItemType Directory -Path $outputDir | Out-Null } # 加载源图片 $srcImage = [System.Drawing.Image]::FromFile((Resolve-Path $sourceImagePath).Path) $graphicsUnit = [System.Drawing.GraphicsUnit]::Pixel foreach ($slice in $sliceConfigs) { $srcX = $slice[0] $srcY = $slice[1] $width = $slice[2] $height = $slice[3] $outputName = $slice[4] $outputFullPath = Join-Path $outputDir $outputName # 定义源图截取区域 $srcRect = [System.Drawing.Rectangle]::new($srcX, $srcY, $width, $height) # 创建对应尺寸的空白位图 $outputBmp = [System.Drawing.Bitmap]::new($width, $height) # 绘制切片 $graphics = [System.Drawing.Graphics]::FromImage($outputBmp) $graphics.DrawImage($srcImage, [System.Drawing.Rectangle]::new(0,0,$width,$height), $srcRect, $graphicsUnit) # 自动识别输出格式 $ext = [System.IO.Path]::GetExtension($outputName).ToLower() $imageFormat = switch ($ext) { ".jpg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } ".jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } ".png" { [System.Drawing.Imaging.ImageFormat]::Png } ".bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } default { [System.Drawing.Imaging.ImageFormat]::Png } } # 保存切片 $outputBmp.Save($outputFullPath, $imageFormat) # 释放本次切片资源 $graphics.Dispose() $outputBmp.Dispose() } # 释放源图片资源 $srcImage.Dispose()
使用说明
- 先修改
可配置参数开始和可配置参数结束之间的内容,匹配你自己的图片路径、输出路径和切片需求 - 切片配置的坐标以源图片左上角为原点,X轴向右递增,Y轴向下递增,所有尺寸单位均为像素
- 输出文件名的后缀可以指定为jpg/png/bmp,代码会自动适配对应格式导出
- 如果需要按固定步长批量切分整图,可以把
$sliceConfigs的手动配置替换为自动生成逻辑,以下是按32x32尺寸均匀切分的示例:
# 按32x32尺寸均匀切分整图的切片配置自动生成示例,替换掉原手动$sliceConfigs配置段即可 $sliceSize = 32 $sliceConfigs = @() for ($x = 0; $x -lt $srcImage.Width; $x += $sliceSize) { for ($y = 0; $y -lt $srcImage.Height; $y += $sliceSize) { $sliceWidth = [Math]::Min($sliceSize, $srcImage.Width - $x) $sliceHeight = [Math]::Min($sliceSize, $srcImage.Height - $y) $sliceConfigs += ,@($x, $y, $sliceWidth, $sliceHeight, "slice_${x}_${y}.png") } }
注意事项
- 运行前确保系统已安装.NET Framework,Win10/Win11默认自带
- 不要在源图片被其他程序占用时运行脚本,否则会加载失败
- 切片尺寸不要超过源图片的宽高范围,超出部分会自动补透明像素(png格式)或者黑色像素(jpg/bmp格式)
内容的提问来源于stack exchange,提问作者likwid786
相关产品推荐
相关产品推荐

