Board logo

标题: [问题求助] 求助 vbs调用Windows自带画图工具对图片打开后保存-批量方式 [打印本页]

作者: likongshun    时间: 2023-8-4 21:44     标题: 求助 vbs调用Windows自带画图工具对图片打开后保存-批量方式

  1. set wshell = wscript.createobject("wscript.shell")
  2. wshell.run "mspaint.exe 20221124123033.jpg"
  3. WScript.Sleep 2000
  4. wshell.SendKeys "^{s}"
  5. WScript.Sleep 2000
  6. wshell.SendKeys "%{F4}"
复制代码
求助高手,如何将以上用画图工具打开图片并保存的代码,做成遍历文件夹文件,循环执行的形式。
作者: Batcher    时间: 2023-8-4 21:55

回复 1# likongshun


    能否介绍一下画图另存为这个操作的目的是什么?
作者: jyswjjgdwtdtj    时间: 2023-8-4 22:14

根据我用画图和sendkeys的十足经验 你这段代码只会极其浪费时间并且开出一堆画图窗口且不会关闭任何一个
vbs画图用wia啊兄弟 况且你打开,然后保存有什么意义?
作者: Five66    时间: 2023-8-4 22:25

打开并保存对图片没啥意义啊,打开并另存至少还能转换格式
作者: hlzj88    时间: 2023-8-5 12:57

这个问题我以前在其他论坛也提过,这样做(另存为同名jpg)的目的可以缩小同尺寸图片占用的空间(xp下),win7下效果不大。win10没用过。

推荐使用 jpeg resizer 这个软件。效率高功能多。
当 部分 jpeg resizer 不能加载的jpg文件,使用上面的代码处理后,可以加载。
作者: jyswjjgdwtdtj    时间: 2023-8-5 17:02

回复 5# hlzj88


    话说保存为jpg压缩理论上来讲和系统没关系 只和压缩算法有关
作者: likongshun    时间: 2023-8-7 13:39

能减少文件大小
  1. Set objFSO = CreateObject("Scripting.FileSystemObject")
  2. strFolder = "./"
  3. Set objFolder = objFSO.GetFolder(strFolder)
  4. Set colFiles = objFolder.Files
  5. For Each strFile in colFiles
  6.     If LCase(objFSO.GetExtensionName(strFile)) = "jpg" Then
  7.         ' 在此处执行操作,例如打印文件名或打开文件等
  8.         set wshell = wscript.createobject("wscript.shell")
  9.         wshell.run("mspaint.exe "+strFile)
  10.         WScript.Sleep 2000
  11.         wshell.SendKeys "^{s}"
  12.         WScript.Sleep 2000
  13.         wshell.SendKeys "%{F4}"
  14.     End If
  15. Next
复制代码

作者: Five66    时间: 2023-8-17 20:17

回复 7# likongshun

这重编码了吧,图片质量降低了,而且也不一定能减少体积,像灰阶图可能反而增加体积
作者: Batcher    时间: 2023-8-17 20:30

回复 7# likongshun


    你能否找一张图片作为例子,把操作前和操作后的图片打包上传到网盘我看看?
作者: jyswjjgdwtdtj    时间: 2023-8-18 12:35

啧 你要转换图片格式你直说啊
作者: jyswjjgdwtdtj    时间: 2023-8-18 12:48

  1. set shell=createobject("shell.application")
  2. foldername="C:\Users"
  3. set nowfolder=shell.namespace(foldername)
  4. Set Img = CreateObject("WIA.ImageFile")
  5. Set IP = CreateObject("WIA.ImageProcess")
  6. Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
  7. set re=new regexp
  8. re.pattern=".(png|bmp|wbmp)$"'这一行自己加
  9. IP.Filters.Add IP.FilterInfos("Convert").FilterID
  10. IP.Filters(1).Properties("FormatID").Value = wiaFormatJPEG
  11. filetree nowfolder
  12. sub filetree(fdobject)
  13. set items=fdobject.items
  14. for each item in items
  15. if item.isfolder then
  16. filetree item.getfolder
  17. elseif re.test(item.path) then
  18. '输出到当前文件夹 确保被转换的不是jpg格式
  19. convert item.path
  20. end if
  21. next
  22. end sub
  23. sub convert(filep)
  24. img.loadfile filep
  25. set img=ip.apply(img)
  26. img.savefile re.replace(filep,".jpg")
  27. end sub
复制代码





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