Jp2 batch converter
From OpenSimulator
(Difference between revisions)
												
			 (→Code)  | 
			|||
| Line 16: | Line 16: | ||
  perl jpg2jp2.pl  |   perl jpg2jp2.pl  | ||
| − | + |   #!/usr/bin/perl -s -U  | |
| − | + |   # textureprep.pl by Phrearch  | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − |   #!/usr/bin/perl  | + | |
| − | + | ||
| − |   foreach my $  | + |   use Cwd;  | 
| − | + |  $dirs=1;  | |
| − | + |  $files=0;   | |
| − | + | ||
| − | + |  sub ScanDirectory{  | |
| + |     my ($workdir) = shift;  | ||
| + | |||
| + |     my ($startdir) = &cwd; # keep track of where we began  | ||
| + | |||
| + |     chdir($workdir) or die "Unable to enter dir $workdir:$!\n";  | ||
| + |     opendir(DIR, ".") or die "Unable to open $workdir:$!\n";  | ||
| + |     my @names = readdir(DIR) or die "Unable to read $workdir:$!\n";  | ||
| + |     closedir(DIR);  | ||
| + | |||
| + |     foreach my $name (@names){  | ||
| + |         next if ($name eq ".");   | ||
| + |         next if ($name eq "..");  | ||
| + | |||
| + | 	#What? a directory?!!  | ||
| + |         if (-d $name){   | ||
| + | 	$dirs++;  | ||
| + | 	&ScanDirectory($name);  | ||
| + | 	next;  | ||
| + |         }  | ||
| + | 	#We found one of those nasty textures  | ||
| + |         if (substr($name, -4) eq ".jpg") {  | ||
| + | 	print "Processing $workdir\\$name...";  | ||
| + | 	$rawname = substr $name, 0, -4;  | ||
| + | 	system("convert -format tga $rawname.jpg $rawname.tga &>/dev/null");  | ||
| + | 	system("rm $name &>/dev/null");  | ||
| + | 	system("image_to_j2k -i $rawname.tga -o $rawname.j2k -r 20,10,1 &>/dev/null");  | ||
| + | 	system("mv $rawname.j2k $rawname.jp2 &>/dev/null");  | ||
| + | 	system("rm $rawname.tga &>/dev/null");  | ||
| + | 	print "done!\n";  | ||
| + | 	$files++;  | ||
| + |         }  | ||
| + |         chdir($startdir) or   | ||
| + |            die "Unable to change to dir $startdir:$!\n";  | ||
| + |     }  | ||
| + |  }  | ||
| + |  &ScanDirectory(".");  | ||
| + |  print "\nDirectories scanned:$dirs\nFiles processed:$files\n";  | ||
Revision as of 04:28, 21 February 2008
Description
The jp2 files used by the Secondlife client, are actually j2k files. These can be encoded by image_to_j2k from openjpeg. The script checks for available tif-files in a root directory, and compresses those to j2k and renames them...
Usage
- Install OpenJPEG svn (if you have trouble compiling, you could try the binaries on their site)
 
svn co http://www.openjpeg.org/svn/trunk cd trunk mkdir bin cd bin cmake .. -DBUILD_EXAMPLES:BOOL=ON make make install
- Make sure that the binaries image_to_j2k and j2k_to_image can be executed from anywhere
 
- Put the code in a file named jpg2jp2.pl, and copy it to the directory where your jpg's are. Call the script:
 
perl jpg2jp2.pl
#!/usr/bin/perl -s -U
# textureprep.pl by Phrearch
use Cwd;
$dirs=1;
$files=0; 
sub ScanDirectory{
   my ($workdir) = shift;
   my ($startdir) = &cwd; # keep track of where we began
   chdir($workdir) or die "Unable to enter dir $workdir:$!\n";
   opendir(DIR, ".") or die "Unable to open $workdir:$!\n";
   my @names = readdir(DIR) or die "Unable to read $workdir:$!\n";
   closedir(DIR);
   foreach my $name (@names){
       next if ($name eq "."); 
       next if ($name eq "..");
#What? a directory?!!
       if (-d $name){ 
$dirs++; &ScanDirectory($name); next;
}
#We found one of those nasty textures
       if (substr($name, -4) eq ".jpg") {
print "Processing $workdir\\$name..."; $rawname = substr $name, 0, -4; system("convert -format tga $rawname.jpg $rawname.tga &>/dev/null"); system("rm $name &>/dev/null"); system("image_to_j2k -i $rawname.tga -o $rawname.j2k -r 20,10,1 &>/dev/null"); system("mv $rawname.j2k $rawname.jp2 &>/dev/null"); system("rm $rawname.tga &>/dev/null"); print "done!\n"; $files++;
       }
       chdir($startdir) or 
          die "Unable to change to dir $startdir:$!\n";
   }
}
&ScanDirectory(".");
print "\nDirectories scanned:$dirs\nFiles processed:$files\n";