Welcome to my blog

ふぇぎふぇぎ

Article page

スポンサーサイト

Category - スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Category - スポンサー広告

Javaで画像をHTMLにしてみた

Category - プログラミング

昔、ニコニコ動画で画像をHTMLで表示するプログラミング動画があった。さっきふと思い出したので自分で作ってみた。

実際に作成されたHTMLをアップロードするのはアホらしいので、作るために書いたコードを載せる。

import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class ImageToHTML{
	public static void main(String[] args){
		if(args.length==0){
			System.err.println("エラー:引数は画像ファイル");
			return;
		}
		
		try{
			File imagefile = new File(args[0]);
			BufferedImage image = ImageIO.read(imagefile);
			
			File output = new File("out.html");
			PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(output)));
			
			pw.println("<style>div{width:1px;height:1px;display:inline-block;}</style>");
			
			for(int y=0;y<image.getHeight();y++){
				for(int x=0;x<image.getWidth();x++){
					int rgb = image.getRGB(x,y);
					int r = (rgb>>16)&0xff;
					int g = (rgb>> 8)&0xff;
					int b = (rgb>> 0)&0xff;
					pw.format("<div style=\"background:rgb(%d,%d,%d);\"></div>",r,g,b);
				}
				pw.println("<br>");
			}
			pw.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

始めに、プログラム引数がなければエラーを表示して終了する。プログラム引数があればargs[0]を画像ファイル名としてBufferedImageで開く。何かおかしかったら例外で強制的にプログラムが終了するが、使うのは自分だけなのでチェックなどはしていない。各自必要に応じて書き加えるとよいだろう。

次に、out.htmlに書き込むためにPrintWriterを作る。このクラスは何度も使ったことがあるが正直よく分かっていないので毎回検索している。System.outみたいな感じで使えるから大変便利だ。

次に、PrintWriterでdiv要素を1x1pxのinline-blockに設定している。inline-blockは横並びにできるブロック要素と思ってもらえばいいだろう。

次に、画像の左上の点から右に、下に動きながらそれぞれの点でRGBを取得して、色背景付きのdiv要素を1点ずつ書き加えている。右端まで来たら改行タグを挿入する。色の分解は左から8ビットのargbとなっているのをビットシフトとマスクで分解している。

このプログラムを正しく実行すると画像ファイルを元にout.htmlが作成される。作成されたHTMLファイルは圧縮された画像ファイルとは違い、プレインテキストファイルなのでファイルサイズが馬鹿でかくなる。下の画像の通りだ。ちなみにFEGI.pngはプロフィール画像のことだ。

2016111019190038d.png 2016111314134496c.png ファイルサイズがやばい

はい、正直、このプログラムに使い道はないと思うが、BudderedImageクラス、PrintWriterクラスの使い方、色の分解を試してみるにはいいのではないだろうか。おまけ:UTF-8をコンパイルするにはjavac -encoding UTF-8 hoge.javaを使うといいよ。

おっぱい 間違えた おわり

Category - プログラミング

- 0 Comments

Post a comment

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。