求推荐能批量交互式裁切图片的Windows轻量化软件

一、限制条件

  1. 首先是Windows端软件
  2. 要轻量。虽然ps可以很完美地完成任务,但是ps太重了。如果打开大量图片,电脑也hold不住。
  3. 默认保存为副本到另一个目录,而不是覆盖保存(这个需求可以不满足,毕竟可以把待处理的图片全部提前复制一份)

二、使用场景
我现在有大量图片,需要从中挑选合适的图片,放大、裁切到制定尺寸。
由于每个图片需要保存的位置都不一样,所以不能使用程序设好参数批量处理,而是必须手动交互式调整。唯一确定的是输出的尺寸需要符合预设。
问困难在于,如果重复打开图片-调整尺寸-保存这样的动作,次数多了会非常烦。
如果真的一次性把全部图片都打开然后逐一处理,那电脑受不了。
所以期望有个能批量处理图片的软件,批量选择图片后,图片实际上只打开了一个。被打开的图片始终应用了预设的裁切尺寸,我只需要根据预览的效果,微调缩放和移动,然后点保存完事。
关键就在于:不需要重复打开和设置裁切区域的动作

你想要有个框框,一个一个来处理图片是吧。

铁打的框框,流水的图片。建议让AI写一个,我没见过这种 :doge:

3 Likes

其实换种思路,找个能够:

  • 记住上次设置的裁剪尺寸参数的、或能设置默认裁剪尺寸
  • 同时还可以自定义裁剪区域

的软件就行。

imagej/Fiji
通过宏可以实现,具体可以问AI
直接贴你的提问,问他用imagej怎么实现就行

用PS的批处理,并不是一次打开所有图片,而是依次打开

然后设置一个动作,每打开一张图片就创建一个裁剪,自动运行。这样PS会自动依次打开图片并裁剪,你只要拖动图片到需要的位置就行了。

1 Like

是这个意思 实际上发完帖子我就开始让ai写了,但是现在才调好缩略图预览和图片加载,裁切框还遥遥无期

顺着这个思路的话,还差一条自动保存到特定目录并命名,如果命名格式没要求的话截图类软件应该就可以,比如picpick

ui:一个用于预览裁剪效果的遮罩,大小可调,以及遮罩后的图片框,加上一些按钮。
后端调用命令行实现(或api),把遮罩参数以及图片参数传给外部工具,比如imagemagick。
这叫 do one thing and do it well.
用wpf大概很快能搞完

对于具体图片,把它的左上角(a,b)到右下角(c,d)部分另存为长宽为e,f的图片文件?
不同图片,这6个参数有什么规律?有什么参数可以固定的??

具体而言是固定裁切结果的长宽,但是在裁切前需要根据预览效果做缩放,并且每次缩放的比例不一定

如上,从算法上讲,需要先缩放,后裁切,所以不能这么用。
我说的开销大的解法是建画布导入图层,画布大小就是最终结果,逐个图层调整,最后全部导出

这玩意门槛就高了,得是个有imagej使用基础的人才行

问了下ai
这个程序实现了以下功能:

  1. 目录选择:点击“选择目录”按钮,弹出文件夹选择对话框,加载目录中的JPG和PNG图片。
  2. 图片显示:在Canvas中显示图片,左上角对齐。
  3. 裁剪框设置
  • 通过鼠标在图片上拖动创建和调整裁剪框(红色边框,半透明填充)。
  • 标尺(上下和左右的灰色区域)作为视觉参考。
  • 裁剪框参数(X, Y, 宽度, 高度)显示在底部文本框中。
  • 用户可直接编辑文本框中的参数,程序会验证输入并限制裁剪框在图片范围内。
  1. 完成处理
  • 点击“完成”按钮,输出当前图片路径和裁剪参数(当前为控制台输出,您需要根据需求修改为实际的外部程序调用)。
  • 保存当前裁剪参数,作为下一张图片的预设值。
  • 自动加载目录中的下一张图片。
  1. 参数记忆:每次完成裁剪后,保存裁剪参数,并在加载新图片时应用。

使用说明

  • 运行程序后,点击“选择目录”选择包含图片的文件夹。
  • 图片加载后,拖动鼠标设置裁剪框,或直接修改文本框中的参数。
  • 点击“完成”处理当前图片并加载下一张。
  • 裁剪参数会自动应用到下一张图片。

其实可以先固定长宽比,最后再按需求对所有图像进行缩放。

  • c - a = e
  • d - b = f

按楼主的需求,固定长宽比的话,其实就是:

  • (c - a)/(d - b) = k,其中 k 为定植。

不需要什么基础,ImageJ 是纯图形化操作,您让 AI 告诉您点菜单栏里的哪个命令、输入哪些参数就行。

找到了一个 toobox 软件,是用来批量裁切图片用于lora训练的,和我的情况比较接近,在和作者沟通中,预计可以满足需求

先后尝试了 GIMP、Krita、Paint.NET 最后找到一个,貌似符合需求(至少能快速地完成此工作,足够流水线作业)

最后总结的方案二,我觉得比较完美了(可惜限定条件:“可行的操作可能只有: 框是固定尺寸,图可以缩放平移”)

内容太占地方,已折叠

软件:XnView MP

https://www.xnview.com/

  1. 支持 Windows
  2. 轻量:便携版安装包大约 90 MB,是一个图片浏览+处理软件,非 PS 那种超级工具
  3. 需要提前复制一份

关键功能 Crop, Save & Next

  • Crop, Save & Next
  • Crop 尺寸有自定义预设(防止不小心拉到了,改变了大小,快速归位)
  • Crop 框点了 Next 后是不动的
    这很符合楼主的需求,


然后开始流水线操作

亲测效果(用时不到一分钟)

目前还有一个问题:怎么放大

目前的想法是,用类似 Snipaste 的贴图功能,在屏幕上粘一个参考框

然后对文件夹里的图片进行快速的 Resize

这个我暂时还没找到完美的方法

方案总结

方案一:(严格按照楼主说的先放大,框不变)

  • 先半自动放大到合适的尺寸
  • 半自动 Crop

方案二:(个人觉得此方案是完美的,貌似只要放大就有损失产生了,和方案一等效,但是更精准)

  • 使用固定比例的 Crop 框,半自动 Crop
  • 一键批量放大到制定的尺寸

用固定的比例 Crop


一键缩放到统一大小

ps 抽象地描述需求不如直接给个 Demo 案例。

这个需求怎么听起来像裁剪证件照的感觉?

确实和裁头像有点接近,裁头像的策略是选择画面、固定比例,我还要根据缩放比例进行权衡,尽量让比例接近100%不发生缩放

如上一楼回复,如果不需要考虑缩放因素,这个软件确实是极佳选择.问题的关键就在于缩放-裁剪在一步内完成,才能完成策略均衡.
可行的操作可能只有: 框是固定尺寸,图可以缩放平移

用 Powerpoint 似乎能实现楼主的需求,具体操作略微麻烦,这里直接录个视频给大家看看效果:

2 Likes

十几年前我还真用过这种软件
一模一样的东西
可惜我早已经忘记名字了

1 Like

指示AI调出来一个imagej/fiji 脚本,非常简单好用:

  1. 把脚本保存成 ijm后缀名的脚本文件
  2. 打开imagej,把脚本拖到imagej窗口
  3. 点击 run

然后就欧克了,你的所有需求都满足
会一次一个打开图片
打开的图片会有预设的选框,可以直接拖动选框,按住shift拖动四角可以原比例调整大小
调整好后点击ok,自动保存到文件夹下新建的"after"子文件夹里。

// 选择文件夹
dir = getDirectory("Choose a directory");  // 选择文件夹
list = getFileList(dir);  // 获取文件夹中的文件列表

// 遍历文件夹中的每一张图片
for (i = 0; i < list.length; i++) {
    // 只处理图像文件(根据文件扩展名过滤)
    if (endsWith(list[i], ".jpg") || endsWith(list[i], ".png") || endsWith(list[i], ".tif") || endsWith(list[i], ".bmp")) {
        open(dir + list[i]);  // 打开图像

        // 执行裁剪操作
        makeRectangle(0, 0, 440, 440);  // 初始位置和尺寸
        waitForUser("wait for human");  // 等待用户交互(暂停)
        run("Crop");  // 执行裁剪

        // 获取当前图像的路径和文件名
        currentPath = getDirectory("image");  // 获取当前图像的文件夹路径
        fileName = getTitle();  // 获取当前图像的文件名
        
        // 查找扩展名
        dotIndex = fileName.lastIndexOf('.');
        if (dotIndex > 0) {  // 确保不是以点开头或没有扩展名
            extension = fileName.substring(dotIndex + 1);
        }

        // 创建新的文件夹路径
        newDirectory = currentPath + "after/";  // 将 "after" 添加到原文件夹路径
        newFilePath = newDirectory + fileName;  // 将文件名与新路径结合

        // 检查 "after" 文件夹是否存在,如果不存在则创建
        if (!File.exists(newDirectory)) {
            File.makeDirectory(newDirectory);
        }

        // 根据文件扩展名确定保存格式
        saveAs(extension, newFilePath);  // 保存文件
        close();  // 关闭当前图像
    }
}