#!/usr/local/bin/perl

#=============================================================================#
# CNG to JPEG (cng2jpg.pl)                                                    #
#                                                                             #
# National Geographic DVDに含まれる画像データ(.cng)をJPEG画像(.jpg)に変換する #
#                                                                             #
# Edited by tadano                                                            #
#                                                                             #
# 2020.02.26 - Ver 0.2   : ファイル名の'_4'を削除、元ファイルも削除           #
# 2020.02.21 - Ver 0.1   : とりあえず作成                                     #
#=============================================================================#

#-----------------------------------------------------------------------------#
# グローバル宣言                                                              #
#-----------------------------------------------------------------------------#
# モジュール
use strict;
use File::Find;
use Cwd;

my $cur_dir = getcwd;
print "$cur_dir\n";

#-----------------------------------------------------------------------------#
# CNG to JPEG変換                                                             #
#-----------------------------------------------------------------------------#
sub cng2jpg
{
	my $src = $_;
	return if((-d $File::Find::name) || $src !~ /\.cng$/);
	print $File::Find::name;

	open(CNG, $src) or die "Can't Open $src. Because $!";
	binmode(CNG);
	my $size = -s $src;

	my $dst = $src;
	$dst =~ s/_4.cng/.jpg/;
	open(JPG, ">$dst");
	binmode(JPG);

	for(my $i = 0; $i < $size; $i++)
	{
		seek(CNG, $i, 0);
		read(CNG, my $orig, 1);
		my $result = unpack("C", $orig) ^ 0xEF;  # XOR
		print JPG pack("C", $result);

#		print uc(unpack("H2", $orig)) . " -> " . sprintf("%02X", $result) . "(" . $result . ") " . pack("C", $result) . "\n" if $i < 10;
	}

	close(CNG);
	close(JPG);

	print " > " . $dst . "\n";

	unlink $src;  # 削除
}

#-----------------------------------------------------------------------------#
# メイン処理                                                                  #
#-----------------------------------------------------------------------------#
find(\&cng2jpg, ".");

