Board logo

标题: [其他] 【已解决】如何调用ImageMagick把一张长图平均切片为800x800像素 [打印本页]

作者: zhengzhenhui    时间: 2024-7-22 00:15     标题: 【已解决】如何调用ImageMagick把一张长图平均切片为800x800像素

本帖最后由 zhengzhenhui 于 2024-7-22 20:13 编辑

把子文件夹中的一张图片平均切片成每份800x800像素的图,并存放于子文件夹,切片后的多个图片按子文件名并排序递增,并删除切片的原始图
已解决 下列答案
  1. @echo off
  2. rem 1. 下载并安装 ImageMagick 这个命令行工具
  3. rem https://imagemagick.org/script/download.php#windows
  4. rem 2. 根据自己电脑实际安装路径设置以下临时环境变量
  5. rem 代码中magick 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
  6. for /r /d %%e in (*) do (
  7. for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
  8. magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
  9. if exist "%%e\%%~ni_1%%~xi" (
  10. del "%%e\%%i"
  11. )
  12. )
  13. )
  14. pause
复制代码

作者: 77七    时间: 2024-7-22 01:13

  1. @echo off
  2. rem 代码中imconvert 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
  3. for /d %%e in (*) do (
  4. for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
  5. imconvert "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
  6. if exist "%%e\%%~ni_1%%~xi" (
  7. del "%%e\%%i"
  8. )
  9. )
  10. )
  11. 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七


    麻烦你了,名称中间的分隔符_  在哪行更改
以你的为基础有又加个指定文件夹
  1. @echo off
  2. rem 代码中magick 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
  3. set "folder_name=指定要修改的文件名"  ;
  4. for /r /d %%e in (*) do (
  5.     if "%%~ne" == "%folder_name%" (
  6.         for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
  7.             magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
  8.             if exist "%%e\%%~ni_1%%~xi" (
  9.                 del "%%e\%%i"
  10.             )
  11.         )
  12.     )
  13. )
  14. pause
复制代码

作者: 77七    时间: 2024-7-22 17:57

回复 9# zhengzhenhui


  
  1. @echo off
  2. rem 批处理保存为ansi编码
  3. set "folder_name=指定要修改的文件名"
  4. for /r /d %%e in (*) do (
  5.     if "%%~nxe" == "%folder_name%" (
  6.         for /f "delims=" %%i in ('2^>nul dir /b /a-d "%%e\*.jpg"') do (
  7.             magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
  8.             if exist "%%e\%%~ni_1%%~xi" (
  9.                 del "%%e\%%i"
  10.             )
  11.         )
  12.     )
  13. )
  14. 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

根据七七的代码又拓展出排除文件夹
  1. @echo off
  2. rem 代码中magick 实为 "ImageMagick-7.1.1-9-portable-Q8-x64\convert.exe"
  3. set "exclude_folder=填写需要排除的文件夹名"  ;
  4. for /r /d %%e in (*) do (
  5.     if "%%~ne" neq "%exclude_folder%" (
  6.         for /f "delims=" %%i in ('dir /b /a-d "%%e\*.jpg"') do (
  7.             magick "%%e\%%i" -crop 800x800 +repage +adjoin -scene 1 "%%e\%%~ni_%%d%%~xi"
  8.             if exist "%%e\%%~ni_1%%~xi" (
  9.                 del "%%e\%%i"
  10.             )
  11.         )
  12.     )
  13. )
  14. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2