一款图片更名工具,通过拖拽排序缩略图并根据目录名称给图片命名

By the100s at 2021-04-24 • 0人收藏 • 1203人看过

111.png

改名工具使用环境:

目录名称需有下划线,目的用于分割2个编号,改名工具使用前面的编号对子文件夹里面的图片改名。或许适用于下图高手产生的图片。


使用方法:

拖动如上图中的ItemPic文件夹到改名工具的窗体上即可开始,拖动排列顺序,双击删除该图片不需要被改名。

222.png

难点:

被改名文件与已有文件名称冲突解决

被抛弃文件的名称与文件夹名称前半部分编码一致,需要改掉。


缺点:

编程技术低导致性能低下,感觉自己能勉强用用吧


致谢:

感谢Aardio群里的大佬们,特别是console.log(""‭:("、每天进步一点点点点和万物皆table,没有他们的技术支持,这工具简直码不下去。

还有感谢Aardio论坛的大佬们留下的例子,取之开源用之开源。

import win.ui;
import fsys;
import gdip;
//import console;
import process.popen;
/*DSG{{*/
var winform = win.form(text="改图片名工具";right=779;bottom=664)
winform.add(
button={cls="button";text="应用更改";left=600;top=616;right=768;bottom=656;color=16711680;font=LOGFONT(h=-16);z=1};
next={cls="button";text="跳过一次";left=488;top=616;right=592;bottom=656;color=16711680;font=LOGFONT(h=-16);z=2};
picname={cls="static";text="图片名自动按目录名改";left=88;top=616;right=280;bottom=656;color=255;font=LOGFONT(h=-16);transparent=1;z=4};
reload1={cls="button";text="本次重新";left=384;top=616;right=488;bottom=656;color=16711680;font=LOGFONT(h=-16);z=5};
static={cls="static";text="图片名:";left=16;top=616;right=96;bottom=656;font=LOGFONT(h=-20);transparent=1;z=3};
static2={cls="static";text="缩略图";left=272;top=624;right=328;bottom=648;font=LOGFONT(h=-16);transparent=1;z=7};
zip={cls="edit";text="0.1";left=344;top=624;right=376;bottom=648;edge=1;z=6}
)
/*}}*/

import fsys.config;
config = ..fsys.config(
	..fsys.getSpecial( 0x1c /*_CSIDL_LOCAL_APPDATA*/ ,"/picrename/" )
);
//io.open()
//将窗口控件绑定到配置文件 config.mainForm
winform.bindConfig( config.winform,{
	edit = "text";
} );
//主体代码来自http://bbs.aardio.com/forum.php?mod=viewthread&tid=22487&highlight=plus

var swap1,swap2,f1,f2,plusctrl1,t
/*
swap1,swap2存互相拖动的两个plus的text值。
f1,f2,存互相拖动的两个plus的背景值
文件列表存每一个子目录里所有的文件名称,键值对,格式大致如
tab={[pic1.jpg]="c:/a/b/c/pic1.jpg"}
失败:保存改名失败的文件,暂时没什么用到。
*/

var 文件列表
var 失败={}
/*
sss为缩略图质量0.1-0.9,越低加载图片就越快但也越模糊
*/
var sss=tonumber(winform.zip.text)
if(sss<0){
sss=0.1	
}elseif(sss>1){
sss=0.9
}

//setFont(point=10;name="宋体")
var goods ={
		cls="plus";/*text="goo";*/left=10;top=10;right=148;bottom=125;
		color=8388736;default=1;font=LOGFONT(name='微软雅黑';h=-19;weight=100;point=10;);notify=1;repeat="scale";valign="bottom";            

		/*
拖动互换背景和text功能:
按下左键,记忆背景和text属性,当弹起左键时,取目标plus的背景和text,并交换。
*/	
		onMouseDown = function(wParam,lParam){
			var x,y = win.getMessagePos(lParam);
			swap1=owner.text;
			plusctrl1=owner;
			f1=owner.getBackground();
		}//end of onMouseUp
			onMouseDoubuleClick = function(wParam,lParam){
			owner.background=0xFFFFFFFF
			owner.text=null
		}
		
		
		onMouseUp = function(wParam,lParam){

			var x,y = win.getMessagePos(lParam);
			//owner.msgbox("拖动" + swap1 + "到 " +owner.text +"并互换背景");
			f2=owner.getBackground();
			owner.background=f1            
			plusctrl1.background=f2
		plusctrl1.text=owner.text  //交换名称
	
	//防止txt残留
	if(owner.background=null){
		owner.text=null
	}else {
	owner.text=swap1
	
	}
	

}//end of onMouseUp

		
			
} 
//io.open();
//产生20个图片plus控件
var  num = 5; 
		for(i=1;4){
		
		for(n=1;num){
				var plusname ="goods"++(i-1)*num+n ;
				goods2 = table.clone(goods);
				goods2.top = (i-1)*(5+150)+10;
				goods2.left= (n-1)*(150+5)+10; 
				goods2.z=(i-1)*num+n;
				goods2.bottom=(i-1)*(5+150)+150
				goods2.right=(n-1)*(150+5)+150
				//goods2.text=plusname;
				
				winform.add(
						[plusname]=goods2;
				);
/*
				
winform[plusname].skin({ 
	color={
		active=0xFF65FF00;
		default=0xFF0065FF;
		hover=0xFFFF9A00
	}; 
	scale ={
		active=1.5;  //放大130%
		//hover=1.5; //放大150%
		default=1;//默认缩小60%
	}; 
})//skin
*/


		}
}

//给每一个plus填充背景图
var fillplus=function(tabin){  //填充plus控件,参数是包含多个图片的数组
		var ut=#tabin	//table参数,存放多个图片全路径tabin:{"c:\pic.jpg";"c:\pic2.jpg"。。。}
		n2=1
		for(i=1;20;1){
				winform["goods"+i].background=null
			winform["goods"+i].text=null
		
		}
		
		for(j=1;20;1){ //20个plus方框
			if(ut>=j){

			ext1=fsys.getExtensionName(tabin[j])
			if(ext1 and ext1="jpg" or ext1="jpeg" or ext1="png" or ext1="gif"){
        
				t=gdip.image(tabin[tabin[j]]).getThumbnail(sss,sss) //tabin[tabin[j]]="c:\pic.jpg"
			var t2=t.saveToBuffer()
			t.dispose(); //释放图片,释放方可改名
			winform["goods"+n2].background=t2;
			winform["goods"+n2].text=tabin[j]//tabin[tabin[j]]   //text="c:\pic.jpg"
			n2=n2+1
			}
			
			}
		} 
		do{  //等待拖动改变位置
			if(!win.delay(0)){break ;}//不卡界面,来自论坛代码
			if(winform.button.text="改名中"){
				winform.button.text="应用更改"
				winform.button.disabled=true;
				break;
			}
			//如果本批次图片已经改名过,可以按跳过按钮
			if(winform.next.text="next"){
				winform.next.text="跳过"
				break;
			}
			if(winform.reload1.text="reload"){
//取缩略图质量,重新填充缩略图,有时候双击错删了不该删的图,可以用此功能
sss=tonumber(winform.zip.text)
if(sss<0){
sss=0.1	
}elseif(sss>1){
sss=0.9
}
				
				n2=1
						for(i=1;20;1){
				winform["goods"+i].background=null
			winform["goods"+i].text=null
		
		}
		for(j=1;20;1){ //20个plus方框
			if(ut>=j){

			ext1=fsys.getExtensionName(tabin[j])
			if(ext1 and ext1="jpg" or ext1="jpeg" or ext1="png" or ext1="gif"){
          
				t=gdip.image(tabin[tabin[j]]).getThumbnail(sss,sss) //tabin[tabin[j]]="c:\pic.jpg"
			var t2=t.saveToBuffer()
			t.dispose(); //释放图片,释放方可改名
			winform["goods"+n2].background=t2;
			winform["goods"+n2].text=tabin[j]//tabin[tabin[j]]   //text="c:\pic.jpg"
			n2=n2+1
			}
			
			}
		} 
		winform.reload1.text="本次重新"
		
			}
			
		}while(true)	
}
//////////////////////////++++++++++++++
//排序功能,对已经改名过的图片们,再次被拉入想重新改名时排序显示。
//排序前pic_1.jpg pic_10.jpg pic_2.jpg pic_3.jpg
//排序后pic_1.jpg pic_2.jpg pic_3.jpg pic_10.jpg
comProc = function(b) begin
		o2=tonumber(string.split(owner,"_")[2])
		b2=tonumber(string.split(b,"_")[2])
		// io.print("o2,b2",o2,b2)
		if(o2=null){
			return false; 
		}elseif(b2=null){
			return true; 
		}
		
		return o2 < b2; 
end;
/////////////////////////+++++++++++++++
//处理被拉入的总文件夹,*ItemPic*,遍历里面的每一个子文件夹
var dealpath2=function(pin){
	a,b,c=fsys.list(pin)
	if(#a>0){
table.sort(a,comProc)
	文件列表=a
	fillplus(a)	
	}elseif(#b>0){
for(i=1;#b;1){
	a=fsys.list(b[b[i]]) 
	if(#a>0){

table.sort(a,comProc)
	文件列表=a
	winform.button.disabled=false;
	fillplus(a)		
	}  


}

	}
	
	
}


//窗体接受拖入
winform.onDropFiles = function(files){
	winform.button.disabled=false;
	var path = table.shift(files);
	if(!path) return;
	dealpath2(path)
	winform.button.disabled=true;
	
}
/////////////////////////////////////////
//改名:p全路径,e新名
dorename = function( p,e ){
	
var prcs = process.popen.cmd(string.format("rename ""%s"" %s", p,e))

	if(string.indexOf(prcs.readErr(-1),"存在")){

		doublerename(p,e,"tempn"+string.random(2))
		
		}else {
		
		}
		

	prcs.close()

}
//改冲突名:p全路径,e新名,临时字符串
doublerename=function(p,e,tmp){
//p=d:/a/b/c/a.jpg  
//e=b.jpg
//tmp=tmp.jpg	
//put d:/a/b/c/b.jpg --> d:/a/b/c/b tmp.jpg   & put d:/a/b/c/a.jpg -->d:/a/b/c/b.jpg
var 旧全名=p //d:/a/b/c/a.jpg      
var 父目录全名=	fsys.getParentDir(p)   //d:/a/b/c/  
var 已存在冲突全名=父目录全名++e  //d:/a/b/c/b.jpg
var 冲突名改成=tmp ++ e
var prcs = process.popen.cmd(string.format("rename ""%s"" %s", 已存在冲突全名,冲突名改成))

	if(string.indexOf(prcs.readErr(-1),"存在")){

		table.push(失败,{已存在冲突全名;冲突名改成})
		}else {
		文件列表[e]=父目录全名++冲突名改成
		prcs = process.popen.cmd(string.format("rename ""%s"" %s", p,e))

	if(string.indexOf(prcs.readErr(-1),"存在")){

		table.push(失败,{p;e})
		}
		}
	prcs.close()

}


//改名前的分析:p全路径,n是pic_1.jpg后面的1
var rename=function(p,n){

if(p=null){
	//console.log("rename p is null ,exit")
	return false; 
}
var 旧全名=p //d:/a/b/c/a.jpg                                                                                                                    
var  旧名=fsys.getFileName(p) //a.jpg
var ext=fsys.getExtensionName(旧名) //string.split(旧名,".")[2]          
var 父目录全名=	fsys.getParentDir(p)   //d:/a/b/c/          
var 父目录名=fsys.getFileName(父目录全名) //c
if(!父目录名){
	return false; //加不加
}
//分割目录
var 新名1=string.split(父目录名,"_")[1]
var 新名=新名1 ++"_"++ n ++"." ++ext
//winform.picname.text=新名1 ++ "_"++ n 
var 新全名=父目录全名++新名



dorename(旧全名,新名)
return true; 
}
//剩余文件的另外处理,防止他们的文件名与文件夹名称前半部分编码一致。
var leftrename=function(){
for k,v in 文件列表

	if(v and v!=""){
		ext1=fsys.getExtensionName(k)
			if(ext1 and ext1="jpg" or ext1="jpeg" or ext1="png" or ext1="gif"){ 
				var 父目录全名=	fsys.getParentDir(v)   //d:/a/b/c/          
var 父目录名=fsys.getFileName(父目录全名) //c

var 新名1=string.split(父目录名,"_")[1]
var  旧名1=string.split(k,"_")[1] //a.jpg

if(新名1=旧名1){
	//console.log("不被更名的图片名与目录名一致,改掉")
	dorename(v,string.random(5)++"."++ext1)
	
}
				}//if ext1
		}//if v 	
}

winform.button.oncommand = function(id,event){
	winform.button.text="改名中"
	//console.clearScreen()
	var n2=0
			for(j=1;20;1){ 
			pp=winform["goods"+j].text 

				if(pp){			
		
			if(rename(文件列表[[pp]],n2)){
				n2=n2+1
				文件列表[pp]=""
			}
	
			}
		} 

	leftrename()
}

winform.next.oncommand = function(id,event){
	winform.next.text="next"
}

winform.reload1.oncommand = function(id,event){
	winform.reload1.text="reload"
}


winform.show();
win.loopMessage();



登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...