ppm8to5.perl 1.2 KB
#! /usr/sbin/perl
#---------------------------------------------------------------------
#	Copyright (C) 1997, Nintendo.
#	
#	File		ppm8to5.perl
#	Coded    by	Yoshitaka Yasumoto.	Apr 10, 1997.
#	Modified by	
#	Comments	
#	
#	$Id: ppm8to5.perl,v 1.1.1.1 2002/05/02 03:27:17 blythe Exp $
#---------------------------------------------------------------------
#
#  [使用方法]
#	perl ppm8to5.perl < infile > outfile
#
#	8 bit RGB を 5 bit RGB に丸める
#

# ppm ファイルのヘッダの解析
$i = 0;
while (<STDIN>){
	s/#.*$//;	# コメントの処理
	s/^\s+//;	# 空白の除去
	while (s/^\S+//){
		$param[$i ++] = $&;	# パラメータの保存
		s/^\s+//;		# 空白の除去
	}	
	last if ($i == 4);
}
die "This is not P6 ppm format!!\n" if ($param[0] ne "P6");

$width  = $param[1];
$height = $param[2];
$pixel  = $param[1] * $param[2];

printf("P6\n%d %d\n255\n", $width, $height);

for ($i = 0; $i < $pixel; $i ++){

    # 1 Pixel 分のデータの取得
    read(STDIN, $buf, 3) == 3 || die "Too short file\n";
    @tmp = unpack("C3", $buf);
    
    # カラー値の取得
    $tmp[0] &= 0xf8;
    $tmp[1] &= 0xf8;
    $tmp[2] &= 0xf8;

    # バイナリへの変換
    $buf = pack("C3", @tmp);    
	    
    # 出力
    print $buf;
}

#======== End of ppm8to5.perl ========