Board logo

标题: [文件管理] 批处理调整图片大小 [打印本页]

作者: hfg1977    时间: 2010-9-24 22:34     标题: 批处理调整图片大小

@rem (作为一个集图爱好者,喜欢收藏各类图集;但有的图只大了却质量不好,丢之可惜,^
放着太占地方,只有调整大小了;^
集图的原则:保持图集的完整性与原始性.原始性只有牺牲一下了.)
  1. @goto start
  2. :help
  3. @echo.===== Ver: 1.1 =========================== 发布日期: 2010-09-24 =======
  4. @echo.        BAT_NAME:        图片大小调整.bat
  5. @echo.        返回值:               
  6. @echo.        作用  :                图片大小调整
  7. @echo.        调用:        图片大小调整.bat [Path...] [file...]
  8. @echo.                [Path]:        文件夹路径
  9. @echo.                [file]:        文件
  10. @echo.        注:关键控制参数:短边的最小像素 %minpix%,小于等于的不予处理;
  11. @echo.====================== Copyright@ by hf-g ========= [彭城] ============
  12. ping /n 4 127.0>nul
  13. goto:end
  14. :start ============================================================
  15. @echo off&setlocal
  16. path=%path%;%~d0\DOS\command\第三方命令行程序
  17. set "nconvert=g:\DOS\command\第三方命令行程序\nconvert.exe"
  18. ::标准屏幕尺寸:
  19. ::19寸宽屏的液晶        1440*900=1.6=8:5
  20. ::17或19的液晶        1280/1024=1.25=5:4
  21. ::20"普屏液晶        1600/1200=4:3 1400/1050=4:3
  22. ::800/600=4:3        1024/768=4:3        2880/1920=1.5=3:2
  23. ::常见图片分辨率:
  24. ::3060/4590=1.5=3:2 2020/3030=3:2
  25. ::长边的最小像素
  26. ::set/a maxpix=
  27. ::★短边的最小像素
  28. set/a minpix=2020
  29. ::==================ADD REG===============================
  30. for /f "skip=4 tokens=3" %%a in ('REG QUERY "HKLM\Software\hf'file" /v resize_pic 2^>nul') do set KEY_v=%%a
  31. if "%KEY_v%" LSS "1" (
  32. reg add "HKLM\SOFTWARE\Classes\Directory\shell\图片大小调整&S\command" /ve /d "\"%~f0\" \"%%1\"" /f>nul
  33. reg add "HKLM\SOFTWARE\Classes\jpegfile\shell\图片大小调整&S\command" /ve /d "\"%~f0\" \"%%1\"" /f>nul
  34. reg add "HKLM\Software\hf'file" /v resize_pic /d 1 /f>nul
  35. )
  36. ::========================================================
  37. if /i "%~1"=="" goto help
  38. if /i "%~1"=="-?" goto help
  39. set "ext="&set "pathname="&set "Dir_name="&set "p_str="
  40. set /a exit_BL=0,D_count=0,f_count=0
  41. call:get_P %*
  42. if "%exit_BL%"=="1" goto end
  43. ::设置临时文件
  44. ::set "tmpfname=%~dp0.\%~n0.log"
  45. ::cd.>"%tmpfname%"
  46. ::echo 生成日志文件:            %tmpfname%
  47. echo 正在处理:
  48. ::========================MAIN============================
  49. set/a D_count-=1,f_count-=1
  50. if not "%pathname_0%"=="" (
  51. set "ext=*.jpg *.bmp"
  52. for /l %%i in (0,1,%D_count%) do (
  53. call pushd "%%pathname_%%i%%"
  54. call echo %%pathname_%%i%%:
  55. for /f "tokens=* delims=" %%i in ('dir /a-d/b/s %ext%') do (
  56. for /f "tokens=1,2 delims=: " %%a in ('%nconvert% -info "%%i"^|findstr /i "Width Height"') do (
  57. if /i "%%a"=="Width" set "pciW=%%b"
  58. if /i "%%a"=="Height" set "pciH=%%b"
  59. )
  60. call call:resize_pic "%%pciW%%" "%%pciH%%" "%%i"
  61. )
  62. popd
  63. ))
  64. if not "%file_0%"=="" (
  65. for /l %%i in (0,1,%f_count%) do (
  66. for /f "tokens=1,2 delims=: " %%a in ('%nconvert% -info "%%file_%%i%%"^|findstr /i "Width Height"') do (
  67. if /i "%%a"=="Width" set "pciW=%%b"
  68. if /i "%%a"=="Height" set "pciH=%%b"
  69. )
  70. call call:resize_pic "%%pciW%%" "%%pciH%%" "%%file_%%i%%"
  71. )
  72. )
  73. :end ==============================================================
  74. ::if exist "%tmpfname%" del "%tmpfname%" "%~dp0.\del_list.bat"
  75. exit /b
  76. ::=================================================================
  77. :resize_pic Width Height picfname
  78. if %~1 GTR %minpix% (
  79. set/p =%~1x%~2 %~nx3<nul
  80. rem echo %~1x%~2 %~3>>"%tmpfname%"
  81.         if %~1 GEQ %~2 (
  82.                 rem 横式图,且高度大于"短边的最小像素"
  83.                 rem if %~2 GTR %minpix% %nconvert% -quiet -out jpeg -ratio -resize 0 %minpix% -o $%%_1 "%~3"
  84.                 if %~2 GTR %minpix% %nconvert% -quiet -out jpeg -ratio -resize 0 %minpix% -o $%% "%~3"
  85.         ) else (
  86.                 rem 竖式图,且宽度大于"短边的最小像素"
  87.                 rem %nconvert% -quiet -out jpeg -ratio -resize %minpix% 0 -o $%%_1 "%~3"
  88.                 %nconvert% -quiet -out jpeg -ratio -resize %minpix% 0 "%~3"
  89.         )
  90. )
  91. goto:eof
  92. ::========================参数设置与获得============================
  93. :get_p
  94. ::判断%1是文件夹或文件
  95. if "%~1"=="" goto:eof
  96. set "p_str=%~1"
  97. if exist "%p_str%" (
  98.         if exist "%p_str%.\" (
  99.         call set "pathname_%%D_count%%=%p_str%"&set /a D_count+=1&shift /1&goto get_p
  100.         )
  101.         call set "file_%%f_count%%=%p_str%"&set /a f_count+=1&shift /1&goto get_p
  102. ) else (
  103.         echo %p_str% 不是一个正确的文件夹路径或文件^!&set /a exit_BL=1&shift /1&goto end
  104. )
  105. @echo off
  106. :get_p_end
  107. goto:eof
复制代码
补充 nconvert 工具下载:
http://bbs.bathome.net/thread-4567-1-1.html
作者: bbwanwt123    时间: 2010-10-1 14:55

运行不了啊············

自动关闭了
作者: Batcher    时间: 2010-10-1 18:54     标题: 回复 2楼 的帖子

你有nconvert.exe么?放在哪个目录?
作者: 523066680    时间: 2010-10-1 20:15

楼主不给力啊,给个三方工具的下载外链+说明一下也行啊
set "nconvert=g:\DOS\command\第三方命令行程序\nconvert.exe"

百度一下,这老帖不得了……
http://www.cn-dos.net/forum/blog.php?tid=25914&uid=51697

[ 本帖最后由 523066680 于 2010-10-1 20:20 编辑 ]
作者: qq15700    时间: 2022-3-26 14:51

回复 3# Batcher


    应该放在哪个目录,然后我拖动文件夹到bat上 不识别,拖动多个照片文件,只有最后一个照片文件转换后有后缀,前面几个都只转换,生成没有后缀的文件
作者: Batcher    时间: 2022-3-26 15:15

回复 5# qq15700


    时间比较久远了,不确定楼主还能否看到你的问题反馈。建议新开一个帖子详细说说自己的需求吧。




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