IPをもとにイラストを自動生成させる。
タイトル:自分だけのイラスト自動生成
カテゴリ:java
投稿日:22/05/14 20:21
更新日:22/05/14 22:43
GOOD
1
お気に入り
以下IPから描画させた絵だよーん。
久々にjava触って遊んでみたので、投稿させてもらいました。お手柔らかに。
<img src="https://tk2-216-17547.vs.sakura.ne.jp/media/myimage_yellow.png" style="width:20%">
```java
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Sample {
//この辺も目視でサイズ調整してるのでハードコーディング
private int x_adjast = 5;
private int y_adjast = 20;
private final Color s_color;
private final Color b_color;
private String ip = "";
//コンストラクタ
public Sample(Color s_color, Color b_color, String ip) {
this.s_color = s_color;
this.b_color = b_color;
this.ip = ip;
}
public Color getB_color() {
return b_color;
}
public static void main(String[] args) {
String ip = getLocalIp();
//ドット絵の色のためipを加工
String[] ip_s = ip.split("\\.");
Sample obj = new Sample(new Color(Integer.parseInt(ip_s[0]),
Integer.parseInt(ip_s[1]),
Integer.parseInt(ip_s[2])), new Color(255,255,255,0), ip);
String[] result = obj.ip2Dot();
//目視でサイズ調整してるのでハードコーディング
BufferedImage img = new BufferedImage(140, 150, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.getGraphics();
//ピュアな描画
obj.drawDot(result, g);
//y方向が薄いので追加描画
obj.drawDot(result, g);
g.dispose();
try {
ImageIO.write(img, "png", new File(".\\output.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param result 描画するデータ
* @param g グラフィックオブジェクト
*/
private void drawDot(String[] result, Graphics g) {
//ピュアに変換描画
for (int i = 0; i < result.length; i++) {
String target = result[i];
//IPに対応したドット絵1rowの半分
for (int c_idx = 0; c_idx < target.length(); c_idx++) {
g.setColor(s_color);
char c = target.charAt(c_idx);
String r = "■";
if (c == '0') {
g.setColor(b_color);
}
g.drawString(r, x_adjast, y_adjast);
x_adjast += 8;
}
//反転したもう半分
for (int c_idx = target.length() - 1; c_idx >= 0; c_idx--) {
g.setColor(s_color);
char c = target.charAt(c_idx);
String r = "■";
if (c == '0') {
g.setColor(b_color);
}
g.drawString(r, x_adjast, y_adjast);
x_adjast += 8;
}
x_adjast = 5;
y_adjast += 8;
}
//上下反転描画
for (int i = result.length - 1; i >= 0; i--) {
String target = result[i];
//IPに対応したドット絵1rowの半分
for (int c_idx = 0; c_idx < target.length(); c_idx++) {
g.setColor(s_color);
char c = target.charAt(c_idx);
String r = "■";
if (c == '0') {
g.setColor(b_color);
}
g.drawString(r, x_adjast, y_adjast);
x_adjast += 8;
}
//反転したもう半分
for (int c_idx = target.length() - 1; c_idx >= 0; c_idx--) {
g.setColor(s_color);
char c = target.charAt(c_idx);
String r = "■";
if (c == '0') {
g.setColor(b_color);
}
g.drawString(r, x_adjast, y_adjast);
x_adjast += 8;
}
x_adjast = 5;
y_adjast += 8;
}
}
/**
* ipをアドレスをドット絵用のデータに変換
*
* @return 8*4の2進数 文字列配列
*/
private String[] ip2Dot() {
String[] result = new String[4];
String l_ip = ip;
String[] ipArray = l_ip.split("\\.");
int count = 0;
for (String s : ipArray) {
String str = String.format("%8s", Integer.toBinaryString(Integer.parseInt(s)))
.replace(' ', '0');
result[count] = str;
count++;
}
return result;
}
private static String getLocalIp() {
// 適当なダミー
String result = "192.168.1.44";
try {
result = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return result;
}
}
```