[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 新手 求帮忙解决 批量等比缩放图片的bat 问题

1.输入设定目标尺寸(length*width)

2.对文件夹下图片进行等比缩放处理,
    如果图片的length 大于图片的width 则 将图片按照 目标尺寸length/图片尺寸length 的比例 进行缩放

    如果图片的length 小于或等于图片的width 则 将图片按照 目标尺寸width/图片尺寸width  的比例 进行缩放 ;

应用场景 :将图片按照桌面分辨率进行等比不失真缩放 。

论坛里面找了下 只有图片尺寸变更或者缩放的回答,查了下 nconvert 的指令 只发现 -ratio 这个指令能等比缩放 ;

新人 对 bat 指令刚接触还不是特别熟悉 ,求大佬帮忙。

本帖最后由 77七 于 2024-1-23 22:46 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. set hh=300
  4. set ww=400
  5. for /f "delims=" %%i in ('dir /b /a-d *.jp*g *.png') do (
  6. for /f "tokens=1-2 delims=: " %%a in ('nconvert -quiet -info "%%i"') do (
  7. if /i "%%a" equ "width" (
  8. set w=%%b
  9. ) else if /i "%%a" equ "height" (
  10. set h=%%b
  11. )
  12. )
  13. setlocal enabledelayedexpansion
  14. if !h! gtr !w! (
  15. endlocal
  16. nconvert -quiet -overwrite -ratio -resize 0 %hh% "%%i"
  17. ) else (
  18. endlocal
  19. nconvert -quiet -overwrite -ratio -resize %ww% 0 "%%i"
  20. )
  21. if exist "%%~ni.jpg" (
  22. if exist "%%~ni.jpeg" (
  23. del "%%~ni.jpeg"
  24. )
  25. )
  26. )
  27. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 qu705196037 于 2024-1-23 20:25 编辑

回复 2# 77七


    可以实现缩放了,就是遇到个小麻烦

   就是我的图片有的是 jpeg和png格式的 ,我就将 这里的 for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (   代码 改成了  for /f "delims=" %%i in ('dir /b /a-d  "*.jpg" "*.png" "*.jpeg" ') do (
   但是执行后发现 jpeg格式的文件 会生成一个同名的 jpg文件。、

   我将这里 nconvert -quiet -out jpeg -ratio -resize 0 %hh% "%%i" 改成了 nconvert -quiet -overwrite -ratio -resize 0 %hh% "%%i"  还是会生成一个新的jpg图片 不会覆盖 。
   有办法解决吗?

TOP

这样子不?ffmpeg(需要enable libutils)
  1. @echo off&chcp 936
  2. set _width=500
  3. set _length=200
  4. for /f "eol=/ delims=" %%i in ('dir /b /a-d *.jp*g') do (
  5. ffmpeg -y -i "%%i" -vf "scale='if(gte(iw,ih),%_width%,-1):if(gte(iw,ih),-1,%_length%):flags=lanczos'" -pix_fmt rgb24 -vcodec png -vframes 1 -an -sn "%%~ni.png"
  6. )
  7. pause
复制代码

TOP

回复 3# qu705196037


   
比如 1.jpeg ,你希望得到的图片文件名?原文件是否保留?
bat小白,请多指教!谢谢!

TOP

回复 5# 77七


    现在的情况是 1.jpeg 处理后 会生成一个 1.jpg ,原1.jpeg 也会存在,相当于多了一个文件。想 不生成新的,如果是 png、jpeg 、jpg的话 都是只是替换 不生成新的。

TOP

回复 6# qu705196037


   已在2楼修改。
bat小白,请多指教!谢谢!

TOP

回复 7# 77七


   可以了 3QU

TOP

返回列表