今からはじめるプログラミング41

ピアノはどうした?

という自分ではった伏線は都合よく全部忘れて。

Openseaに登録するのが数個で面倒になったので、全部一緒にしてしまえばいいのでは?と安直な結論にいたった。

作ってみたら結構アンディ・ウォーホールみたいなポップアートみたいになったので、これでよし?という感じです。

Openseaには10000個全部一緒にしたもの(まだ登録していない)ですが、ここではサンプルとして100個のものをあっぷしています。

 

プログラムの名前すらめんどくささが全面に押し出されているw

 

Gacchanko

--------------------------------------

package sample22;

 

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

 

import javax.imageio.ImageIO;

 

/**

 * 画像ファイルを統合する

 * 

 * @author ma

 *

 */

public class Gacchanko {

 

public int cntFiles(String resFile) {

File folder = new File(resFile);

File files = folder.listFiles();

return files.length;

}

private int dfltX = 48;

private int dfltY = 48;

private String outFileName = "integrated.png";

 

public void setSize(int x, int y) {

this.dfltX = x;

this.dfltY = y;

}

 

public void setFileName(String fileName) {

this.outFileName = fileName;

}

 

public boolean execute(String folderName) throws IOException {

// このメソッドはMacのみ必要?違うインターフェースにして部品貸した方がいいかも

File dataFiles = this.extractPNG(new File(folderName));

 

int fileCnt = dataFiles.length;

// 平方根を求める(あまりいい方法ではないだろうな)

double root = Math.sqrt(fileCnt);

// Doubleでは使い勝手悪いのでキャスト

int iRoot = (int) root;

System.out.println(iRoot);

// ベース

BufferedImage img = new BufferedImage(dfltX * iRoot, dfltY * iRoot, BufferedImage.TYPE_INT_ARGB);

 

int idxFile = 0;

for (int x = 0; x < root; x++) {

for (int y = 0; y < root; y++) {

BufferedImage addImage = null;

 

// 画像

addImage = ImageIO.read(dataFiles[idxFile]);

int x2 = x * dfltX;

int y2 = y * dfltX;

img.getGraphics().drawImage(addImage, x2, y2, dfltX, dfltY, null);

 

idxFile++;

 

}

}

ImageIO.write(img, "png", new File("./" + outFileName));

 

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 static void main(String arguments[]) {

long startTm = System.currentTimeMillis(); // 時間計測

Gacchanko gac = new Gacchanko();

gac.setFileName("integ.png");

String folderName = "./100";

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"); // 処理時間

}

}

---------------------------------------

 

 

f:id:yo2an:20211007113817p:plain

ぽっぷなかんじ

 

 

アンディ・ウォーホールは好きな作家の一人です。