この日記の方針。
- この日記では、超初心者向けの内容は取り扱っておりません。モジュールの利用など、実践的な内容が中心となります。
- ここに貼られるソースは、基本的にそのままでは動かないものばかりです。各自の責任でご利用ください。
- 内容が間違っていることがあります。その際はご指摘いただけるとありがたいです。「検証してみたら違う結果が出た」などの報告も大歓迎です。
- perl -e die
2008-06-24 (Tue)研究で使うかも?
■ [GD] 画像をRGB分解するやつ

作ってみた。思いのほか簡単だった。
透過PNGとかは考えてない。めんどい。航空写真から植物と人工物を割り出したいときとか。
何色が何ピクセルあるか、とか出力してやった方が親切だったかも。
#!/usr/bin/perl use strict; use GD; my $truecolor = 1; foreach my $srcfile (@ARGV) { unless ($srcfile =~ /\.png$/) { warn "File '$srcfile' is not PNG file."; next; } my $im = GD::Image->newFromPng($srcfile, $truecolor); unless (defined $im) { warn "File '$srcfile' cannot load as PNG file."; next; } my($width, $height) = $im->getBounds; # 出力先 my @imdst = ( GD::Image->new($width, $height, $truecolor), GD::Image->new($width, $height, $truecolor), GD::Image->new($width, $height, $truecolor), ); for (my $y = 0; $y < $height; $y++) { for (my $x = 0; $x < $width; $x++) { my $idx = $im->getPixel($x, $y); my @RGB = $im->rgb($idx); for (my $i = 0; $i < scalar(@RGB); $i++) { next unless (defined $imdst[$i]); my @destRGB = (0, 0, 0); $destRGB[$i] = $RGB[$i]; my $color = $imdst[$i]->colorAllocate(@destRGB); $imdst[$i]->setPixel($x, $y, $color); } } } my %out; @out{qw(r g b)} = @imdst; foreach my $key (keys %out) { (my $destfile = $srcfile) =~ s/\.(png)$/\.$key\.$1/; my $png_data = $out{$key}->png; open(OUT, '>', $destfile) || die; binmode(OUT); print OUT $png_data; close(OUT); } }
コメント
Anu2012/02/21 19:16I have been so beiwledred in the past but now it all makes sense!
itaway2012/02/23 18:22lHbLXf <a href="http://dzjpevburdgz.com/">dzjpevburdgz</a>
udsptzruz2012/02/23 23:29G7M8aA , [url=http://tzfpwxgojypg.com/]tzfpwxgojypg[/url], [link=http://sqsvucyrloes.com/]sqsvucyrloes[/link], http://xmnjuoygjuok.com/
トラックバック - http://perl.g.hatena.ne.jp/Cress/20080624