適当に画像を生成する必要があったので、JDKのHttpServerを使って画像を出力するだけのWebサーバーを作ってみた。
「http ://localhost:6780/HOGE」にアクセスするとこんな画像が得れる。
ソースはこんな感じ
package imageserver; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import javax.imageio.ImageIO; public class ImageServer { private static final int PORT = 6780; /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { HttpServer server = HttpServer.create( new InetSocketAddress(PORT), 0); server.createContext("/", new HttpHandler() { @Override public void handle(HttpExchange he) throws IOException { String path = he.getRequestURI().getPath(); System.out.println(path); //画像を作成 BufferedImage bi = getStringImage(path); //PNGデータを得る ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bi, "png", baos); //ヘッダー he.getResponseHeaders().add( "Content-Type", "image/png"); he.sendResponseHeaders(200, baos.size()); //出力 OutputStream os = he.getResponseBody(); os.write(baos.toByteArray()); os.close(); he.close(); } }); server.start(); } /** * 文字列画像を得る * @param s 描画する文字列 * @return 文字列を描いた画像 */ public static BufferedImage getStringImage(String s) { BufferedImage bi = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); //背景 int code = s.hashCode(); int rd = (code & 4) == 0 ? 0 : 255; int gr = (code & 2) == 0 ? 0 : 255; int bl = (code & 1) == 0 ? 0 : 255; g.setColor(new Color(rd, gr, bl)); g.fillRect(0, 0, 400, 300); //文字色 if((code & 7) != 0){ g.setColor(Color.BLACK); }else{ g.setColor(Color.WHITE); } //文字描画 g.setFont(new Font(Font.SERIF, Font.BOLD, 50)); g.drawString(s, 0, 160); g.dispose(); return bi; } }