标题: [其他] 【已解决】如何调用ImageMagick把一张长图平均切片为800x800像素 [打印本页]
作者: zhengzhenhui 时间: 2024-7-22 00:15 标题: 【已解决】如何调用ImageMagick把一张长图平均切片为800x800像素
本帖最后由 zhengzhenhui 于 2024-7-22 20:13 编辑
把子文件夹中的一张图片平均切片成每份800x800像素的图,并存放于子文件夹,切片后的多个图片按子文件名并排序递增,并删除切片的原始图
已解决 下列答案- @echo off
- rem 1. 下载并安装 ImageMagick 这个命令行工具
- rem https://imagemagick.org/script/download.php#windows
- rem 2. 根据自己电脑实际安装路径设置以下临时环境变量
- rem 代码中magick 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
- for /r /d %%e in (*) do (
- for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
- magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
- if exist "%%e\%%~ni_1%%~xi" (
- del "%%e\%%i"
- )
- )
- )
- pause
复制代码
作者: 77七 时间: 2024-7-22 01:13
- @echo off
- rem 代码中imconvert 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
- for /d %%e in (*) do (
- for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
- imconvert "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
- if exist "%%e\%%~ni_1%%~xi" (
- del "%%e\%%i"
- )
- )
- )
- pause
复制代码
ai写的convert代码,一次命中正确答案。补充提问,添加了-scene 1 表示图片序号从1开始(默认是0)。
作者: zhengzhenhui 时间: 2024-7-22 13:10
回复 2# 77七
imconvert这个命令没法调用 你那边咋弄的
作者: 77七 时间: 2024-7-22 13:26
回复 3# zhengzhenhui
我的电脑有两个convert.exe,都在环境变量中,所以改名一个。
或者直接写convert的绝对路径,如 "d:\ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
作者: zhengzhenhui 时间: 2024-7-22 14:03
本帖最后由 zhengzhenhui 于 2024-7-22 15:53 编辑
回复 4# 77七
我电脑有十个convert.exe。。。。都给我整无语了,ImageMagick我的这个版本解压没有convert.exe。。。 你那个版本能不能发给我啊
作者: 77七 时间: 2024-7-22 16:19
回复 5# zhengzhenhui
直接把imconvert改为magick。我试了下,无论2楼代码中的版本还是官网最新便携版本,都是可以直接用magick的。
作者: zhengzhenhui 时间: 2024-7-22 17:05
回复 6# 77七
是可以了 麻烦问一下,如何在下层的每个子目录的图片切片,现在这个是二级文件夹,我刚刚自己试一下没成功,底层子文件夹切好直接跑二级了,,,
作者: 77七 时间: 2024-7-22 17:10
回复 7# zhengzhenhui
代码第三行 for /r /d ,即加一个/r
作者: zhengzhenhui 时间: 2024-7-22 17:38
本帖最后由 zhengzhenhui 于 2024-7-22 17:57 编辑
回复 8# 77七
麻烦你了,名称中间的分隔符_ 在哪行更改
以你的为基础有又加个指定文件夹- @echo off
- rem 代码中magick 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
- set "folder_name=指定要修改的文件名" ;
-
- for /r /d %%e in (*) do (
- if "%%~ne" == "%folder_name%" (
- for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
- magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
- if exist "%%e\%%~ni_1%%~xi" (
- del "%%e\%%i"
- )
- )
- )
- )
- pause
复制代码
作者: 77七 时间: 2024-7-22 17:57
回复 9# zhengzhenhui
- @echo off
- rem 批处理保存为ansi编码
- set "folder_name=指定要修改的文件名"
-
- for /r /d %%e in (*) do (
- if "%%~nxe" == "%folder_name%" (
- for /f "delims=" %%i in ('2^>nul dir /b /a-d "%%e\*.jpg"') do (
- magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
- if exist "%%e\%%~ni_1%%~xi" (
- del "%%e\%%i"
- )
- )
- )
- )
- pause
复制代码
作者: zhengzhenhui 时间: 2024-7-22 17:58
回复 10# 77七
名称中间的分隔符_ 在哪行更改呀,麻烦你了,问的我都不好意思
作者: 77七 时间: 2024-7-22 18:04
本帖最后由 77七 于 2024-7-22 18:08 编辑
回复 11# zhengzhenhui
有问题问就行了,你只是代表大家提出了一个问题。
%%~ni_%%d%%~xi
%%~ni表示原文件名;分隔符 _ ;%%d是magick代码的图片序号代码 ;%%~xi表示扩展名
修改后把第9行 判断是否存在 原文件名_1原扩展名,同步修改一下,或者把判断去掉也行,直接删除,主要是为了防止出错,分割失败却删除了原图片。
作者: zhengzhenhui 时间: 2024-7-22 18:11
本帖最后由 zhengzhenhui 于 2024-7-22 18:14 编辑
回复 12# 77七
我也是研究着玩的,实际用的不多,有其他软件代替
第9行代码 if exist "%%e\%%~ni_1%%~xi
我改成 if exist "%%e\%%~ni-1%%~xi 代码就不灵了,我一直以为我理解错误
作者: zhengzhenhui 时间: 2024-7-22 18:15
根据七七的代码又拓展出排除文件夹- @echo off
- rem 代码中magick 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
- set "exclude_folder=填写需要排除的文件夹名" ;
-
- for /r /d %%e in (*) do (
- if "%%~ne" neq "%exclude_folder%" (
- for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
- magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
- if exist "%%e\%%~ni_1%%~xi" (
- del "%%e\%%i"
- )
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |