答案1
据我所知,Windows 没有原生的图像分割应用程序,但是有一个非常著名的免费实用程序 Imagemagick,可用于 Linux、Mac OS X、iOS 和 Windows。
您可以在此处下载安装程序(向上/向下滚动可查看其他操作系统版本)
https://imagemagick.org/script/download.php#windows
选择合适的 32 位或 64 位二进制文件。我有 64 位 Windows 10,我选择
ImageMagick-7.1.0-51-Q16-HDRI-x64-dll.exe
运行安装程序,并确保选中安装旧版实用程序的复选框。
安装程序完成后,Windows 的“Program Files”文件夹中会有一个文件夹,名称类似
C:\Program Files\ImageMagick-7.1.0-Q16-HDRI
此文件夹中将有一个名为“convert.exe”的命令行可执行文件。
请不要将其与位于 C:\Windows\system32\ 中的名为 convert.exe 的 Windows 程序混淆,该程序可将 FAT 卷转换为 NTFS。
现在,你可以在包含 50 个图像文件的文件夹中创建一个批处理脚本,如下所示
@echo off
for %%A in (*.jpg) do (
"C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\convert.exe" -crop 50%%x100%% "%%~nxA" "%%~nA-split%%~xA"
)
您需要更改指定的文件扩展名,如果不是.jpg
更新程序中的文件路径以匹配计算机上的实际文件路径。
这是我得到的。左侧分割是 split-0.jpg 文件,右侧分割是 split-1.jpg 文件。
答案2
用于图像处理伊凡视界许多用户在 Windows 下安装了它。作为 ImageMagick 的替代解决方案,有一个保存图片块对话框可处理一个(或几个)文件。也可以通过 GUI 中的设置进行批处理。
请注意并警告 - 保留原件(保存副本)以防出现问题。
文件夹中多个文件的用例
拥有多张不同尺寸的图像需要几个步骤。
从主菜单执行以下步骤:
- 文件 > 打开并打开一张图片
- 文件 > 缩略图(或使用快捷方式
T
)。这将打开 IrfanView 缩略图。 - 在缩略图视图中按尺寸对图像进行排序
- 选项 > 排序缩略图 > 按图像宽度
- 选择所有具有相同图像宽度(例如 2048px)的文件。
- 文件 > 使用选定文件启动批处理对话框...(或使用快捷方式
B
)。请注意,选定的文件现在列在中Input files
。 - 选择批量转换 - 重命名结果文件在下面
Work As
- 点击批量转换设置 Advanced裁剪 x 偏移:
0
和宽度(例如1024
px)并Left top
进行第一次传递,如屏幕截图所示。Save settings
根据您的需要使用。 - 打开批量重命名设置. 设置名称模式
$N_1
。 - 浏览输出文件夹或使用当前文件夹。
- 点击开始批次
- 使用Return to batch按钮。
- 再次打开批量重命名设置并设置名称模式
$N_2
- 再次点击批量转换设置 Advanced裁剪 x 偏移:
0
和宽度(例如1024
px)并Right top
进行第二遍。
选择具有不同尺寸的其他图像并重复上述步骤。
仅适用于单个文件(可能只有几个文件)
从主菜单使用:
- 文件 > 打开
- 选项 > 导出图像拼块(分割图像)...
- 根据需要设置图块数量(列和行),例如 2 x 1
答案3
它必须是批处理吗?如果它可以是 Powershell 脚本,那么;
- 将其保存为SomeName.ps1
- 右击它
- 选择“使用 PowerShell 运行”。
如果您没有创建文件夹,它将创建一个空文件夹,您可以在其中放置图像(我假设是 jpg 图像),您还可以选择要剪切它们的方向(无第三方:));
param (
[string]$cutDirection = ""
)
if (-not $cutDirection) {
$cutDirection = Read-Host "Enter '(h)orizontal' or '(v)ertical' to specify the cut direction.`nPress Enter for default (horizontal)"
}
if ($cutDirection -notin @("horizontal", "h", "vertical", "v")) {
Write-Host "Invalid cut direction. Defaulting to 'horizontal'."
$cutDirection = "horizontal"
}
Write-Host "Getting the current directory..."
$currentDir = $PSScriptRoot
Write-Host "Current directory: $currentDir"
$imagesFolder = Join-Path -Path $currentDir -ChildPath "Images"
if (-not (Test-Path -Path $imagesFolder -PathType Container)) {
Write-Host "Images folder not found. Exiting..."
Exit
}
Write-Host "Changing to the Images folder..."
Set-Location -Path $imagesFolder
Write-Host "Current directory: $PWD"
$outputFolder = Join-Path -Path $currentDir -ChildPath "CutImages"
if (-not (Test-Path -Path $outputFolder -PathType Container)) {
Write-Host "Creating output folder for cut images..."
New-Item -Path $outputFolder -ItemType Directory | Out-Null
Write-Host "Output folder created: $outputFolder"
}
Add-Type -AssemblyName System.Drawing
Write-Host "Collecting list of JPG files..."
$jpgFiles = Get-ChildItem -Path $currentDir -Filter *.jpg -Recurse
if ($jpgFiles.Count -eq 0) {
Write-Host "No JPG files found in the parent folder."
Exit
}
Write-Host "Processing JPG files..."
foreach ($file in $jpgFiles) {
Write-Host "Processing: $($file.FullName)"
$image = $null
try {
$image = [System.Drawing.Image]::FromFile($file.FullName)
} catch {
Write-Host "Error loading image: $($_.Exception.Message)"
continue
}
if ($image -eq $null) {
Write-Host "Failed to load image $($file.FullName). Skipping..."
continue
}
$width = $image.Width
$height = $image.Height
Write-Host "Image dimensions: Width = $width, Height = $height"
if ($cutDirection -eq "horizontal" -or $cutDirection -eq "h") {
Write-Host "Cutting $($file.Name) horizontally..."
$newWidth = [math]::Round($width / 2)
$newImageA = $image.Clone([System.Drawing.Rectangle]::FromLTRB(0, 0, $newWidth, $height), $image.PixelFormat)
$newImageA.Save("$outputFolder\$($file.BaseName)_a.jpg")
$newImageB = $image.Clone([System.Drawing.Rectangle]::FromLTRB($newWidth, 0, $width, $height), $image.PixelFormat)
$newImageB.Save("$outputFolder\$($file.BaseName)_b.jpg")
Write-Host "$($file.Name) cut horizontally."
}
else {
Write-Host "Cutting $($file.Name) vertically..."
$newHeight = [math]::Round($height / 2)
$newImageA = $image.Clone([System.Drawing.Rectangle]::FromLTRB(0, 0, $width, $newHeight), $image.PixelFormat)
$newImageA.Save("$outputFolder\$($file.BaseName)_a.jpg")
$newImageB = $image.Clone([System.Drawing.Rectangle]::FromLTRB(0, $newHeight, $width, $height), $image.PixelFormat)
$newImageB.Save("$outputFolder\$($file.BaseName)_b.jpg")
Write-Host "$($file.Name) cut vertically."
}
$image.Dispose()
}
Write-Host "Image processing complete."