欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

极其简陋的对图像进行批处理

程序员文章站 2022-03-17 07:55:38
...

在用 openjpeg 对图像进行无损 JPEG2000 压缩的处理时,我有几百张图像要压缩,本来它的运行方式是在当前文件夹下输入 cmd,把要处理的图像名写上,和命名转换格式后的图像(opj_compress -i xx.bmp -o xx.j2k),就可以运行,咳咳说下这个如何弄吧,还是朋友告诉我才知道的,可能很多人知道,但不排除有些人不知道嘛。

极其简陋的对图像进行批处理

我就想,有那种批处理方法可以循环读取文件,执行同一个操作,于是就到处查命令行 /bat 文件批处理怎么用等各种关键词,没查到直接可以套用现成的语句,就看了下for命令的用法,写了极其简陋的一句,在 openjpeg 的执行文件下存为 .bat 文件:

for /r %%i in (??????.bmp) do opj_compress -i %%i -o %%i.j2k
pause

可以运行,就是新图像的名字是 ??????.bmp.j2k,很难看,不知道怎么改,也没有指定导出到哪个文件夹,因此就和被处理的图像放在一起,还得自己复制粘贴出来。所以若有同学看到,且刚好熟悉这一方面,还望赐教更加完善的命令( ̄▽ ̄)"

 

再讲一讲这句命令各段的含义吧:

/r :把 .bat 文件所在的  当前目录  和  此目录下的子目录 下所有符合括号里的文件找出来,供后面的命令执行。如果 /r 后面指定了了目录,例如 /r c:\,就找出C盘里所有符合的文件啦。所以我要处理的图片的文件夹也放在这儿了

(如果是 for /d ........则只在当前目录提取)

%%i:变量,找出的文件。

(??????.bmp): 要找的文件。几个问号,就代表几个关键字,由于我图像的命名是 000000.bmp,我就写了6个问号来匹配。当然可以用*.bmp,*代表任意多个字符,这里用了正则表达式的知识应该,但是我还没接触过。(想到以前做的数据库实验了,但是忘光光辽)

do:关键字,后面接要执行的命令

opj_compress -i %%i -o %%i.j2k:这句就是 openjpeg 软件本身的命令,要做的工作了。

对了有个重命名的关键词,不知道是不是因为我的图像是从 0 开始排序,而命令行序列不能从 0 开始递增,还是这句本身有问题,反正我批处理循环重新命名没成功,下面也贴一下:

for /l %%i in (1,1,100) do ren *.j2k  %%i.j2k
pause

原理就是 ren 关键词是重命名的,/l 是排序的,(1,1,100) 中,表示从 1 开始,以 1 为公差,递增100次。更详细的可以查查语法用法什么的。

相关标签: cmd