今からはじめるプログラミング41
ピアノはどうした?
という自分ではった伏線は都合よく全部忘れて。
Openseaに登録するのが数個で面倒になったので、全部一緒にしてしまえばいいのでは?と安直な結論にいたった。
作ってみたら結構アンディ・ウォーホールみたいなポップアートみたいになったので、これでよし?という感じです。
Openseaには10000個全部一緒にしたもの(まだ登録していない)ですが、ここではサンプルとして100個のものをあっぷしています。
プログラムの名前すらめんどくささが全面に押し出されているw
Gacchanko
--------------------------------------
package sample22;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
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"); // 処理時間
}
}
---------------------------------------
アンディ・ウォーホールは好きな作家の一人です。