找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21551|回复: 7

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

[复制链接]
发表于 2024-1-23 00:00:34 | 显示全部楼层 |阅读模式
1.输入设定目标尺寸(length*width)

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

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

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

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

新人 对 bat 指令刚接触还不是特别熟悉 ,求大佬帮忙。
发表于 2024-1-23 16:00:26 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-1-23 20:23:27 | 显示全部楼层
本帖最后由 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图片 不会覆盖 。
   有办法解决吗?
发表于 2024-1-23 20:37:32 | 显示全部楼层
这样子不?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

复制代码
发表于 2024-1-23 21:27:55 | 显示全部楼层
回复 3# qu705196037


   
比如 1.jpeg ,你希望得到的图片文件名?原文件是否保留?
 楼主| 发表于 2024-1-23 22:22:53 | 显示全部楼层
回复 5# 77七


    现在的情况是 1.jpeg 处理后 会生成一个 1.jpg ,原1.jpeg 也会存在,相当于多了一个文件。想 不生成新的,如果是 png、jpeg 、jpg的话 都是只是替换 不生成新的。
发表于 2024-1-23 22:47:07 | 显示全部楼层
回复 6# qu705196037


   已在2楼修改。
 楼主| 发表于 2024-1-23 23:19:25 | 显示全部楼层
回复 7# 77七


   可以了 3QU
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:43 , Processed in 0.019030 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表