その漫画自炊オタクはImageJマクロに恋をする

プログラミングを用いた、自炊漫画の画像処理

【最低限自炊セット】2021年最新版!これだけはおすすめしたい漫画自炊用マクロ

 

f:id:yu3xx:20211024091701j:plain

 

 

紹介した漫画自炊用マクロも増えてきて、だんだんどれがどれだかわからなくなってきました。

 

この記事では、私が最前線で使用しているおすすめ漫画自炊用マクロを6つだけ厳選して紹介します!

 

 

 

1. 画像処理はこれひとつ!

 

解像度変更、コントラスト変更などの、よく使う画像処理をまとめてやっちゃう!

適切な濃度コントラストも自動設定してくれる!ラクチン!

 

漫画自炊の超基本マクロ!


 

2. スキャン後の自動フォルダ分け!

 

いちいちフォルダ作るのはメンドイ!

 

フォルダ作成から収納までぜんぶオートで!


3. 表紙カバーの切り取り!

 

表紙カバーはちょん切らない!

 

処理でちゃちゃっとクロップ!

 

4. 縦線が出にくくなるスキャン方法!

 

縦線防止の「表向きスキャン+裏向きスキャン統合法」!

 

普通にやると統合が大変だけど、マクロなら簡単に合体!

 

5. ファイル名のリネーム!

 

地味に掲載を忘れてたやつ!

 

ファイル名を間違った時の修正に便利!

 

裏向きスキャンを表向きの番号に直す時にも使える!

( [Reverse Order] にチェック!)

 

//FileRename_andCopy.txt

version = "2.2.3"; print(""); print("FileRename_andCopy"); print("ver",version); //Do something for selected folder showMessage("Select Open Folder"); openDir=getDirectory("Choose a Directory"); print("Processing :",openDir); selectWindow("Log"); showMessage("Select Save Folder"); saveDir=getDirectory("Choose a Directory"); print("Save to :",saveDir); selectWindow("Log"); list=getFileList(openDir); wait(1000); //Dialog Dialog.create("Processing setting"); Dialog.addString("newTitle (e.g. BORUTO_11)","BORUTO_11"); Dialog.addNumber("Start Number",1); Dialog.addNumber("digit of newIndex",4); Dialog.addCheckbox("Reverse order",false); Dialog.show; newTitle = Dialog.getString(); startNumber = Dialog.getNumber(); digit = Dialog.getNumber(); order = Dialog.getCheckbox(); //make parentDirectory parentDir=saveDir+"postProc_"+getTimeStamp()+"/"; File.makeDirectory(parentDir); subDir = parentDir+newTitle+"/"; if(!File.exists(subDir)){ File.makeDirectory(subDir); } Table.create("Correspondence Table"); //operation startTime=whatTimeNow(); if(order == false){ for (i=0; i<list.length;i++){ name=list[i]; dotIndex = lastIndexOf(name,"."); ext = substring(name,dotIndex); newname = newTitle+"_"+zeroPad(startNumber,digit)+ext; //Output table Table.set("index",i,i); Table.set("Original",i,name); Table.set("Newname",i,newname); //Progress.the second decimal place by 10000/100 print(i+1,"/",list.length,"...Progress=",floor((i+1)/list.length*10000)/100,"%"); File.copy(openDir+name,subDir+newname); print("Copy to...",subDir+newname); startNumber++; } }else if(order == true){ current = list.length-1; for (i=0; i<list.length;i++){ name=list[current]; dotIndex = lastIndexOf(name,"."); ext = substring(name,dotIndex); newname = newTitle+"_"+zeroPad(startNumber,digit)+ext; //Output table Table.set("index",i,i); Table.set("Original",i,name); Table.set("Newname",i,newname); //Progress.the second decimal place by 10000/100 print(i+1,"/",list.length,"...Progress=",floor((i+1)/list.length*10000)/100,"%"); File.copy(openDir+name,subDir+newname); print("Copy to...",subDir+newname); startNumber++; current--; } } //fin Table.update; finishTime=whatTimeNow(); print("Start Time.... ",startTime); print("FinishTime... ",finishTime); print("oshimai"); //----------------------------------------------------------------------------- //Define function getTimeStamp function getTimeStamp(){ getDateAndTime(year,month,dayOfWeek,dayOfMonth,hour,minute,second,msec); timeStamp="string"; strYear=""+year; month=month+1; if(month<10){ strMonth="0"+month; }else{ strMonth=""+month; } if(dayOfMonth<10){ strDayOfMonth="0"+dayOfMonth; }else{ strDayOfMonth=""+dayOfMonth; } if(hour<10){ strHour="0"+hour; }else{ strHour=""+hour; } if(minute<10){ strMinute="0"+minute; }else{ strMinute=""+minute; } if(second<10){ strSecond="0"+second; }else{ strSecond=""+second; } timeStamp=strYear+strMonth+strDayOfMonth+"_"+strHour+strMinute+strSecond; return timeStamp; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //Define function whatTimeNow function whatTimeNow(){ getDateAndTime(year,month,dayOfWeek,dayOfMonth,hour,minute,second,msec); stringTime="string"; strYear=""+year; month=month+1; if(month<10){ strMonth="0"+month; }else{ strMonth=""+month; } if(dayOfMonth<10){ strDayOfMonth="0"+dayOfMonth; }else{ strDayOfMonth=""+dayOfMonth; } if(hour<10){ strHour="0"+hour; }else{ strHour=""+hour; } if(minute<10){ strMinute="0"+minute; }else{ strMinute=""+minute; } if(second<10){ strSecond="0"+second; }else{ strSecond=""+second; } stringTime=strYear+"/"+strMonth+"/"+strDayOfMonth+"_"+strHour+":"+strMinute+":"+strSecond; return stringTime; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //Define function zeroPadding function zeroPad(int,digitZeroPad){ if(int < 0){ exit("ZeroPadding Error!! int<0"); } stringInt = ""+int; digitStringInt = lengthOf(stringInt); digitSubtra = digitZeroPad-digitStringInt; if(digitSubtra < 0){ exit("ZeroPadding Error!! digitSubtra<0"); } if(digitZeroPad > 0){ for(i=0; i<digitSubtra; i++){ stringInt = "0"+stringInt; } } return stringInt; } //----------------------------------------------------------------------------- /

 

 

6. やっかいな縦線を補正!

 

これを使えば縦線ノイズはとりあえずなんとかなる! (2022/02/23 追記)


 

 

 

おしまい

 

 

 

 

  

imagej-jisui.hatenablog.com