今からはじめるプログラミング45(ごめんなさい)
年末年始、絵もプログラムも全然進んでなくて。
ひとつは手荒れがもう病気レベルになってとてもなにか手芸ができるじょうたいではなかったのと。
そしてもう一つは心臓の病気の発覚で、どうも今の仕事もつづけられなさそうな感じで、かなりメンタルに来ていました。
なるべく乾燥しない場所で、リラックスして過ごしたつもりですが、なかなかそうもいかず。
なんていう感じです。
というわけで漫画が書けていないので、UNITYさんのネタはまた次の記事です。ごめんなさい。(そこでした)
今回は、本当は年末に作って、年始に報告したかったんですが、再び(なんたびかわすれた?)NFTです。
いくつかコレクションを作ってみて。(以下)
https://opensea.io/collection/ma2-ys-collection
https://opensea.io/collection/ghost-penguins
どうも僕のNFTはドット絵要素が足りない?
ということで、なんとか簡単にドット絵に変換できないかと思いました。
でもあまり頭は良くないので、簡単にドット絵っぽく見えるには、高解像度から低解像度に変換すればいいのでは?と思って作ったのが、今回のサンプルです。
動きとしては、ファイルパスを渡すとその中のpng形式のファイル(ようは元画像)を低解像度(ソース上48*48固定)に変換する。という感じです。ファイル名もつけるのが面倒だったので、ループのインデックスを名前にしています。
ModToDt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
package sample27;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ModToDt {
private int dfltX = 48;
private int dfltY = 48;
public boolean execute(String folderName) throws IOException {
// このメソッドはMacのみ必要?違うインターフェースにして部品貸した方がいいかも
File dataFiles = this.extractPNG(new File(folderName));
int fileCnt = dataFiles.length;
// ベース
BufferedImage img = new BufferedImage(dfltX, dfltY, BufferedImage.TYPE_INT_ARGB);
int idxFile = 0;
for (int x = 0; x < fileCnt; x++) {
BufferedImage addImage = null;
// 画像
addImage = ImageIO.read(dataFiles[idxFile]);
img.getGraphics().drawImage(addImage, 0, 0, dfltX, dfltY, null);
ImageIO.write(img, "png", new File("./" + x +".png"));
}
return false;
}
/**
* ファイル(フォルダ)のりすとから<BR>
* pngファイルの配列をつくる
*
* @param file resource folder
* @return File png files
*/
private File extractPNG(File file) {
int cntPng = 0;
ArrayList<File> pngLst = new ArrayList<File>();
File resource = file.listFiles();
for (int i = 0; i < resource.length; i++) {
int idxPng = resource[i].getName().indexOf(".png");
if (idxPng > 0) {
cntPng++;
pngLst.add(resource[i]);
}
}
File retn = new File[cntPng];
for (int i = 0; i < cntPng; i++) {
retn[i] = pngLst.get(i);
}
return retn;
}
public int cntFiles(String resFile) {
File folder = new File(resFile);
File files = folder.listFiles();
return files.length;
}
public static void main(String arguments[]) {
long startTm = System.currentTimeMillis(); // 時間計測
ModToDt gac = new ModToDt();
String folderName = "./だい1弾";
System.out.println(gac.cntFiles(folderName));
try {
gac.execute(folderName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTm = System.currentTimeMillis(); // 時間計測
long execTm = endTm - startTm;
System.out.println("exec batch time:" + execTm + "ms"); // 処理時間
}
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
という感じです。
たしかに低解像度にはなりましたが。。。手直ししないと、アイコンとしては使えないですね。。。
以下結果ファイルです。(入出力のSS)