IPをもとにイラストを自動生成させる。

タイトル:自分だけのイラスト自動生成

カテゴリ:java

投稿日22/05/14 20:21

更新日22/05/14 22:43

GOOD
none1
お気に入り
none
以下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; } } ```
©Bloodberry