perlを使って画像を■の羅列でを表示

にわとり 
ニコニコ動画を見ていたらPHPを使って画像を■で表示するってのを見かけたので、perlで作ってみました。
何か役に立つのかといえばNOですが、手段が目的みたいなものでしいて言えばperlでGDを使う勉強になるかな?で、下がその動画です。

perlのソースは以下の通りです。

というわけでソースです。GDライブラリ使ってます。画像をそのままのサイズで■に変換するとあまりにも重いので、
幅80ピクセルの縮小してから、■に変換しています。

use GD;

$tw = 80;
$fname =”01-hiyo-s2.gif”;

$imageorg = GD::Image->new($fname);
$er = $imageorg->width/$tw;
$dw = int($imageorg->width/$er);
$dh = int($imageorg->height/$er);
$image = new GD::Image($dw,$dh);
$image  = GD::Image->newTrueColor( $dw, $dh );
GD::Image::copyResampled($image,$imageorg,0,0,0,0,$dw,$dh,$imageorg->width,$imageorg->height);
my($HTML) =”;
for($y=0;$y < $image->height; $y++){
 for($x=0; $x < $image->width; $x++){
  $index = $image->getPixel($x,$y);
  my($r,$g,$b) = $image->rgb($index);
  $hr = unpack(“H2”,pack(“C”,$r));
  $hg = unpack(“H2”,pack(“C”,$g));
  $hb = unpack(“H2”,pack(“C”,$b));
  $HTML .= “<font
color=#$hr$hg$hb>■</font>”;
 }
 $HTML .= “<br>”;
}

$HEAD =<<“EOF”;
<html>
<head>
<style type=”text/css”>
<!–
body {
line-height: 100%;
letter-spacing: 0px;
}
–>
</style>
</head>
<body>
<table>
<tr>
<td nowrap>
EOF

$FOOT =<<“EOF”;
</td>
</tr>
</table>
</body>
</html>
EOF

open(FILE,”>a.html”);
print FILE $HEAD;
print FILE $HTML;
print FILE $FOOT;
close(FILE);

 

サンプルの画像はHP素材のおすそわけ。
blog
さんから頂いてきました。
実際に出来たhtmlはここです。

タグ :