Board logo

标题: [文件操作] [已解决]批处理如何将bmp图片文件另存为/转换成jpg图片文件 [打印本页]

作者: yu--zz5337    时间: 2015-11-28 13:20     标题: [已解决]批处理如何将bmp图片文件另存为/转换成jpg图片文件

本帖最后由 pcl_test 于 2016-12-14 22:22 编辑

因为公司有严格的规定,不可以下载或使用任何非公司软件
而公司又没有合适的软件,将3mb的bmp图片转换为200k的jpg图片

我想到的办法是 将bmp文件用windows自带图片软件mspaint.exe打开并另存为jpg文件
但是图片有几千张,以后可能会更多
所以想求助是否可以采用bat程序执行
要怎样写代码
作者: yiwuyun    时间: 2015-11-28 13:55

对mspaint的接口不了解。但用powerpoint肯定可以。 如果电脑没ppt那就不晓得了。
作者: pcl_test    时间: 2015-11-28 14:33

  1. //&cls&dir /b *.bmp|cscript -nologo -e:jscript "%~f0"&pause&exit/b
  2. var files = WScript.StdIn.ReadAll().split(/\r\n/);
  3. for (var i=0; i<files.length; i++){
  4.     var img = new ActiveXObject('WIA.ImageFile');
  5.     var imgps = new ActiveXObject('WIA.ImageProcess');
  6.     img.LoadFile('.\\'+files[i]);
  7.     imgps.Filters.Add(imgps.FilterInfos('Convert').FilterID);
  8.     imgps.Filters(1).Properties('FormatID').Value = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}';
  9.     var img = imgps.Apply(img);
  10.     img.SaveFile('.\\'+files[i].replace(/(.+)\.[^\.]+$/,'$1')+'.jpg');
  11. }
复制代码

作者: 依山居    时间: 2015-11-28 14:36

我是来劝楼主换公司的。
作者: 523066680    时间: 2015-11-28 14:41

公司的电脑不能插U盘么?
作者: yu--zz5337    时间: 2015-11-28 14:57

太感谢pcl_test,真是太好了.

公司的电脑不可以连接任何电子设备,包括给手机充电
公司不允许使用外来软件是为了产权的保护问题, 我可以理解的,有被罚的经历.

再次感谢pcl_test,不知道我什么时候可以学到这种程度
是什么语言编写的阿
作者: yu2n    时间: 2015-11-28 14:57

  1. 'Convert bmp file(batch) type to JPG
  2. 'http://www.experts-exchange.com/questions/21969652/Convert-bmp-file-batch-type-to-JPG.html
  3. ' File Name:BmpToJpg.vbs
  4. Const xlHtml = 44: Dim Args, pPath
  5. Set Args = WScript.Arguments
  6. If Args.Count <> 1 Then WScript.Quit
  7. If LCase(Right(Args(0), 4)) <> ".bmp" Then WScript.Quit
  8. pPath = WScript.ScriptFullName & "\..\"
  9. With CreateObject("Excel.Application")
  10. With .Workbooks.Add(1)
  11. With .ActiveSheet
  12. .Pictures.Insert(Args(0)): .Shapes(1).Cut
  13. .PasteSpecial "Picture (JPEG)"
  14. End With
  15. .SaveAs pPath & "Temporary.htm", xlHtml: .Close False
  16. End With
  17. .Quit
  18. End With
  19. With CreateObject("Scripting.FileSystemObject")
  20. .CopyFile pPath & "Temporary.files\image001.jpg", _
  21. Replace(oPath, ".bmp", ".jpg", 1, -1, 1)
  22. .DeleteFile pPath & "Temporary.htm"
  23. .DeleteFolder pPath & "Temporary.files", True
  24. End With
复制代码

作者: aa77dd@163.com    时间: 2015-11-28 15:06

为楼主推荐一工具,  比较专业的

图片处理工具 ImageMagick , 带命令行工具
http://www.imagemagick.org/script/index.php

支持200+种格式互相转换
http://www.imagemagick.org/script/formats.php

命令行工具批处理代码示例
http://www.webhek.com/batch-optimize-images-script
作者: yu--zz5337    时间: 2015-11-28 15:08

本帖最后由 yu--zz5337 于 2015-11-28 15:21 编辑

回复 7# yu2n
感谢7楼的热心帮助.不过好像不行,没有成功.
感谢8楼的热心帮助.不过公司里不可以安装任何网络软件的,所以应该不行.
不过还是收藏了,可以在我自己的computer上用
作者: yu--zz5337    时间: 2015-11-29 10:32

不知道能不能单纯用bat就能解决的
作者: pcl_test    时间: 2015-11-29 11:08

回复 10# yu--zz5337

不能
作者: aa77dd@163.com    时间: 2015-11-29 11:26

本帖最后由 aa77dd@163.com 于 2015-11-29 11:27 编辑

回复 10# yu--zz5337

单纯批处理 需要 借助 命令行的图片转换工具 或者 调用某工具的 dll 接口 如果有这样工具的话

总之都需要一个命令行工具,  无论这个工具是微软提供的 还是第三方的

没有找到微软提供有这样的命令行工具,

而 ImageMagick 就提供了这样一个命令行工具 convert

批处理代码示例:

for %%f in (*.jpg) do (
       convert "%%~nf.jpg" -type truecolor "%%~nf.bmp"
)

除非你的公司自己去开发一个这样的命令行工具,  恐怕没什么好办法了
作者: yu--zz5337    时间: 2015-11-29 11:57

感谢aa77dd@163.com 和 pcl_test 的回答.
作者: pcl_test    时间: 2016-12-14 22:21

  1. @echo off
  2. rem win7及以上系统运行
  3. powershell -c "[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing');dir *.bmp|%%{$image=[System.Drawing.Image]::FromFile($_.FullName);$image.Save($($_.BaseName+'.jpg'), [System.Drawing.Imaging.ImageFormat]::Jpeg);$image.Dispose()}"
  4. pause
复制代码

作者: ddrwin    时间: 2022-2-12 23:32

回复 14# pcl_test


    版主大大太厉害了!谢谢!
作者: 5i365    时间: 2022-2-13 10:11

本帖最后由 5i365 于 2022-2-13 10:17 编辑

回复 14# pcl_test


    感觉大侠分享, 刚刚试着改为了下面的ps代码来执行, 但是生成的文件和批处理在同一文件夹, 没有在 cd 转到的文件夹下
另外, 这个 $image.Dispose() 命令可以不用吗? 好像不加对代码也没影响
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. cd "C:\Users\Administrator\Desktop\新建文件夹"
  3. [void][Reflection.Assembly]::LoadWithPartialName('System.Drawing')
  4. dir *.bmp |
  5. foreach{
  6. $image = [Drawing.Image]::FromFile($_.FullName)
  7. $image.Save($($_.BaseName + '.jpg'), [Drawing.Imaging.ImageFormat]::Jpeg)
  8. $image.Dispose()
  9. }
复制代码





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