くれすのPerl日記 このページをアンテナに追加 RSSフィード

この日記の方針。

  1. この日記では、超初心者向けの内容は取り扱っておりません。モジュールの利用など、実践的な内容が中心となります。
  2. ここに貼られるソースは、基本的にそのままでは動かないものばかりです。各自の責任でご利用ください。
  3. 内容が間違っていることがあります。その際はご指摘いただけるとありがたいです。「検証してみたら違う結果が出た」などの報告も大歓迎です。
  4. perl -e die

2008-06-24 (Tue)研究で使うかも?

[] 画像をRGB分解するやつ 18:44  画像をRGB分解するやつ - くれすのPerl日記 を含むブックマーク はてなブックマーク -  画像をRGB分解するやつ - くれすのPerl日記  画像をRGB分解するやつ - くれすのPerl日記 のブックマークコメント

作ってみた。思いのほか簡単だった。

透過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);
    }
}

AnuAnu2012/02/21 19:16I have been so beiwledred in the past but now it all makes sense!

itawayitaway2012/02/23 18:22lHbLXf <a href="http://dzjpevburdgz.com/">dzjpevburdgz</a>

udsptzruzudsptzruz2012/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