<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JeroenWaisMan</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JeroenWaisMan"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/JeroenWaisMan"/>
		<updated>2026-05-12T02:27:15Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Jp2_batch_converter_for_windows</id>
		<title>Jp2 batch converter for windows</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Jp2_batch_converter_for_windows"/>
				<updated>2008-08-21T09:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;JeroenWaisMan: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
For how, why and where it is made for: please refer to the wikipage of the [[jp2_batch_converter|original script]].&lt;br /&gt;
&lt;br /&gt;
This is a modification of that script to make the system commands work on windows systems.&lt;br /&gt;
Also  a helpful /help explanation and optional /D command to delete the old files is added.&lt;br /&gt;
&lt;br /&gt;
Note: these are some quick adjustments to the original, it may or may not work, depending on your setup. It did work here.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* This script is a perl script, so you first should go and install that. ([http://www.perl.org/get.html www.perl.org])&lt;br /&gt;
&lt;br /&gt;
* The ImageMagick executables for windows. ([http://www.imagemagick.org www.imagemagick.org])&lt;br /&gt;
Please note that the 'convert.exe' executable conflicts with the FAT-to-NTFS batch command of windows.&lt;br /&gt;
This script will therefor seek a 'imconvert.exe' file in the PATH. Please rename it, or adjust the lines that start with:&lt;br /&gt;
 system(&amp;quot;imconvert ...&lt;br /&gt;
&lt;br /&gt;
* Openjpegs J2K Codec executables, more specifically: image_to_j2k.exe. ([http://www.openjpeg.org/index.php?menu=download www.openjpeg.org])&lt;br /&gt;
&lt;br /&gt;
* References to all executables in the PATH environment variable. &lt;br /&gt;
This can be set trough Right-click My Computer-&amp;gt;Properties: Advanced tab-&amp;gt;Environment variables.&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
The script takes 2 arguments&lt;br /&gt;
&lt;br /&gt;
* An optional /D argument, if added the script will also delete the old image files&lt;br /&gt;
&lt;br /&gt;
* A required directory specified.&lt;br /&gt;
&lt;br /&gt;
* Or, you could start it with a /help command, which gives about the same info as this page.&lt;br /&gt;
&lt;br /&gt;
===Running===&lt;br /&gt;
Execute this from command prompt, optionally adding a /D argument for also deleting the source images.&lt;br /&gt;
 perl jp2batch.pl /D &amp;quot;c:\directory\with\images\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# jp2batch.pl&lt;br /&gt;
# OpenSim jp2 texture preparation script (for windows)&lt;br /&gt;
# Converts jpg/jpeg/bmp/tga files to valid jp2(jk2) files for SL&lt;br /&gt;
# Author: Phrearch, modified by Jeroen Waisman for Windows systems&lt;br /&gt;
# Credits: Tedd1, Phrearch&lt;br /&gt;
&lt;br /&gt;
$dirs=0;&lt;br /&gt;
$files=0;&lt;br /&gt;
$delete=0;&lt;br /&gt;
&lt;br /&gt;
sub Scan {&lt;br /&gt;
    my ($dir) = @_;&lt;br /&gt;
    local ($substr);&lt;br /&gt;
    $substr = substr($dir, -1);&lt;br /&gt;
    if(($substr eq &amp;quot;/&amp;quot;) || ($substr eq &amp;quot;\\&amp;quot;)) {&lt;br /&gt;
        $dir = substr($dir, 0, -1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (-d $dir) {&lt;br /&gt;
        &amp;amp;ScanDirectory($dir);&lt;br /&gt;
        print &amp;quot;Directories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        print &amp;quot;Non-existent directory $dir\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
sub ScanDirectory {&lt;br /&gt;
    my ($workdir) = @_;&lt;br /&gt;
    local (@names);&lt;br /&gt;
    $dirs++;&lt;br /&gt;
    opendir(DIR, $workdir) or die &amp;quot;Unable to open $workdir:$!\n&amp;quot;;&lt;br /&gt;
    @names = readdir(DIR) or die &amp;quot;Unable to read $workdir:$!\n&amp;quot;;&lt;br /&gt;
    closedir(DIR);&lt;br /&gt;
    foreach my $tmpName (@names) {&lt;br /&gt;
        my $name = $workdir.&amp;quot;\\&amp;quot;.$tmpName;&lt;br /&gt;
        #\. or \.. in directory&lt;br /&gt;
        if ($tmpName =~ /^\.\.?$/) {&lt;br /&gt;
            next;&lt;br /&gt;
        }&lt;br /&gt;
        #directory&lt;br /&gt;
        elsif (-d $name) {&lt;br /&gt;
            print &amp;quot;Entering directory $name\n&amp;quot;;&lt;br /&gt;
            &amp;amp;ScanDirectory($name);&lt;br /&gt;
            next;&lt;br /&gt;
        }	&lt;br /&gt;
        #jpg or jpeg&lt;br /&gt;
        elsif ($tmpName =~ /^(.*)\.([jJ][pP][eE]?[gG]|[bB][mM][pP]|[tT][gG][aA]|[tT][iI][fF][fF]?|[rR][aA][wW])$/) {&lt;br /&gt;
            $filename = $1;&lt;br /&gt;
            $ext = lc($2);&lt;br /&gt;
            $rawname = $workdir.&amp;quot;\\&amp;quot;.$filename;&lt;br /&gt;
            $files++;&lt;br /&gt;
            print &amp;quot;\n----- Processing $filename.$ext -----&amp;quot;;&lt;br /&gt;
            &amp;amp;Convert($rawname,$ext,$filename);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
sub Convert {&lt;br /&gt;
    my ($rawname, $ext, $filename) = @_;&lt;br /&gt;
    my @imageXY = split('x',`identify -format &amp;quot;%wx%h&amp;quot; &amp;quot;$rawname.$ext&amp;quot;`); &lt;br /&gt;
    my $imageX = pop(@imageXY);&lt;br /&gt;
    my $imageY = pop(@imageXY);&lt;br /&gt;
    my $optX;&lt;br /&gt;
    my $optY;&lt;br /&gt;
    my $ar;&lt;br /&gt;
    my $optar;&lt;br /&gt;
&lt;br /&gt;
    #landscape or square, search for optimal X&lt;br /&gt;
    if (($imageX &amp;gt;= $imageY) &amp;amp;&amp;amp; ($imageX != 0)) {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageY / $imageX);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optX = &amp;amp;supportedXY($imageX);&lt;br /&gt;
        $optY = $optX * $optar;&lt;br /&gt;
        #both aspectratio and resolution are correct&lt;br /&gt;
        if(($imageX!=$optRes) || ($ar!=$optar)) {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optY\xx$optX)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    #portrait, search for optimal Y&lt;br /&gt;
    elsif($imageY != 0) {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageX / $imageY);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optY = &amp;amp;supportedXY($imageY);&lt;br /&gt;
        $optX = $optY * $optar;&lt;br /&gt;
        #Needs conversion&lt;br /&gt;
        if(($imageY!=$optRes) || ($ar!=$optar)) {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optX\xx$optY)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if ($ext =~ /^(?:[jJ][pP][eE]?[gG])$/) {&lt;br /&gt;
        print &amp;quot;\nConverting $ext to valid openjpeg (tga) format to handle... &amp;quot;;&lt;br /&gt;
        system(&amp;quot;imconvert -format tga \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.tga\&amp;quot;&amp;quot;);&lt;br /&gt;
        print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        if($delete==1) {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
            $delete=3;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            $delete=2;&lt;br /&gt;
        }&lt;br /&gt;
        $ext=&amp;quot;tga&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;\nCreating .j2k (jpeg2000) file... &amp;quot;;&lt;br /&gt;
    system(&amp;quot;image_to_j2k -i \&amp;quot;$rawname.$ext\&amp;quot; -o \&amp;quot;$rawname.j2k\&amp;quot; -r 20,10,1&amp;quot;);&lt;br /&gt;
    print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    print &amp;quot;\nRenaming .j2k file to .jp2... &amp;quot;;&lt;br /&gt;
    # We cannot rename if there is already such an file, so find the file-number that CAN be named to&lt;br /&gt;
    if(-e &amp;quot;$rawname.jp2&amp;quot;) {&lt;br /&gt;
        $num = 1;&lt;br /&gt;
        while(-e &amp;quot;$rawname $num.jp2&amp;quot;) {&lt;br /&gt;
            $num++;&lt;br /&gt;
        }&lt;br /&gt;
        system(&amp;quot;rename \&amp;quot;$rawname.j2k\&amp;quot; \&amp;quot;$filename $num.jp2\&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    if($delete&amp;gt;0) {&lt;br /&gt;
        if($delete&amp;gt;1) {&lt;br /&gt;
            print &amp;quot;Deleting temporary .tga file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
            if($delete==3) {&lt;br /&gt;
                $delete=1;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                $delete=0;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            print &amp;quot;Deleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;--------------------------------\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
sub supportedAR {&lt;br /&gt;
    my ($ar) = @_;&lt;br /&gt;
    my @arReference=(1.0,0.5,0.25,0.125,0.0625);&lt;br /&gt;
    my $arOptimal;&lt;br /&gt;
    my $arDivTemp=1.0;&lt;br /&gt;
    my $arDiv;&lt;br /&gt;
    #Get optimal aspect ratio&lt;br /&gt;
    foreach (@arReference) {&lt;br /&gt;
        $arDiv=abs($ar-$_);&lt;br /&gt;
        if($arDiv &amp;lt; $arDivTemp) {&lt;br /&gt;
            $arDivTemp=$arDiv;&lt;br /&gt;
            $arOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $arOptimal;&lt;br /&gt;
}  &lt;br /&gt;
sub supportedXY {&lt;br /&gt;
    my ($res) = @_;&lt;br /&gt;
    my @resReference=(64.0,128.0,256.0,512.0,1024.0);&lt;br /&gt;
    my $resOptimal;&lt;br /&gt;
    my $resDivTemp=4096.0;&lt;br /&gt;
    my $resDiv;&lt;br /&gt;
    #Get optimal axis resolution&lt;br /&gt;
    foreach (@resReference) {&lt;br /&gt;
        $resDiv=abs($res-$_);&lt;br /&gt;
        if($resDiv &amp;lt; $resDivTemp) {&lt;br /&gt;
            $resDivTemp=$resDiv;&lt;br /&gt;
            $resOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $resOptimal;&lt;br /&gt;
} &lt;br /&gt;
if (@ARGV&amp;gt;1) {&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;/D&amp;quot;) || (@ARGV[0] eq &amp;quot;/d&amp;quot;)) {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[1].&amp;quot;... (deleting old files) \n\n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;Scan(@ARGV[1]);&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;)) {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;... (deleting old files) \n\n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;Scan(@ARGV[0]);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Provide just one directory argument, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
elsif (@ARGV&amp;gt;0) {&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;help&amp;quot;) || (@ARGV[0] eq &amp;quot;?&amp;quot;)) {&lt;br /&gt;
        print &amp;quot;\nBatch convert images to opensim-compatible .jp2 files\nWorks for: .jpg/.jpeg, .bmp, .tga, .tif/.tiff or .raw files\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;perl jp2batch.pl [/D] [station:][path]dir\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  dir       Directory (and sub-directories) to search for image files.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  -D        If provided, old files will be deleted.\n\n\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Dependencies, these executables should be available in the PATH or directory of the script.\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  ImageMagick library functions: (note that I renamed one executable)\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.imagemagick.org/\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    imconvert.exe       originaly named convert.exe, but renamed due to a Windows batch-command conflict.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    identify.exe\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  OpenJpeg2000 library's J2K Codec: \n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.openjpeg.org/\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    image_to_j2k.exe\n\n\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;)) {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;You must provide a directory to process, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;...\n\n&amp;quot;;&lt;br /&gt;
        $delete = 0;&lt;br /&gt;
        &amp;amp;Scan(@ARGV[0]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
    print &amp;quot;Provide a directory to process, optionally with '/D' argument...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
&lt;br /&gt;
Ofcourse almost all credit goes to the original author of this script. I just adjusted a few commands to make it work on Windows systems.&lt;/div&gt;</summary>
		<author><name>JeroenWaisMan</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Jp2_batch_converter_for_windows</id>
		<title>Jp2 batch converter for windows</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Jp2_batch_converter_for_windows"/>
				<updated>2008-08-20T18:46:40Z</updated>
		
		<summary type="html">&lt;p&gt;JeroenWaisMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
For how, why and where it is made for: please refer to the wikipage of the [[jp2_batch_converter|original script]].&lt;br /&gt;
&lt;br /&gt;
This is a modification of that script to make the system commands work on windows systems.&lt;br /&gt;
Also  a helpful /help explanation and optional /D command to delete the old files is added.&lt;br /&gt;
&lt;br /&gt;
Note: these are some quick adjustments to the original, it may or may not work, depending on your setup. It did work here.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* This script is a perl script, so you first should go and install that. ([http://www.perl.org/get.html www.perl.org])&lt;br /&gt;
&lt;br /&gt;
* The ImageMagick executables for windows. ([http://www.imagemagick.org www.imagemagick.org])&lt;br /&gt;
Please note that the 'convert.exe' executable conflicts with the FAT-to-NTFS batch command of windows.&lt;br /&gt;
This script will therefor seek a 'imconvert.exe' file in the PATH. Please rename it, or adjust the lines that start with:&lt;br /&gt;
 system(&amp;quot;imconvert ...&lt;br /&gt;
&lt;br /&gt;
* Openjpegs J2K Codec executables, more specifically: image_to_j2k.exe. ([http://www.openjpeg.org/index.php?menu=download www.openjpeg.org])&lt;br /&gt;
&lt;br /&gt;
* References to all executables in the PATH environment variable. &lt;br /&gt;
This can be set trough Right-click My Computer-&amp;gt;Properties: Advanced tab-&amp;gt;Environment variables.&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
The script takes 2 arguments&lt;br /&gt;
&lt;br /&gt;
* An optional /D argument, if added the script will also delete the old image files&lt;br /&gt;
&lt;br /&gt;
* A required directory specified.&lt;br /&gt;
&lt;br /&gt;
* Or, you could start it with a /help command, which gives about the same info as this page.&lt;br /&gt;
&lt;br /&gt;
===Running===&lt;br /&gt;
Execute this from command prompt, optionally adding a /D argument for also deleting the source images.&lt;br /&gt;
 perl jp2batch.pl /D &amp;quot;c:\directory\with\images\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# jp2batch.pl&lt;br /&gt;
# OpenSim jp2 texture preparation script (for windows)&lt;br /&gt;
# Converts jpg/jpeg/bmp/tga files to valid jp2(jk2) files for SL&lt;br /&gt;
# Author: Phrearch, modified by Jeroen Waisman for Windows systems&lt;br /&gt;
# Credits: Tedd1, Phrearch&lt;br /&gt;
&lt;br /&gt;
$dirs=0;&lt;br /&gt;
$files=0;&lt;br /&gt;
$delete=0;&lt;br /&gt;
&lt;br /&gt;
sub ScanDirectory&lt;br /&gt;
{&lt;br /&gt;
    my ($workdir) = @_;&lt;br /&gt;
    local (@names);&lt;br /&gt;
    $dirs++;&lt;br /&gt;
    opendir(DIR, $workdir) or die &amp;quot;Unable to open $workdir:$!\n&amp;quot;;&lt;br /&gt;
    @names = readdir(DIR) or die &amp;quot;Unable to read $workdir:$!\n&amp;quot;;&lt;br /&gt;
    closedir(DIR);&lt;br /&gt;
    foreach my $tmpName (@names)&lt;br /&gt;
    {&lt;br /&gt;
        my $name = $workdir.&amp;quot;\\&amp;quot;.$tmpName;&lt;br /&gt;
        #\. or \.. in directory&lt;br /&gt;
        if ($tmpName =~ /^\.\.?$/)&lt;br /&gt;
        {&lt;br /&gt;
            next;&lt;br /&gt;
        }&lt;br /&gt;
        #directory&lt;br /&gt;
        elsif (-d $name)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;Entering directory $name\n&amp;quot;;&lt;br /&gt;
            &amp;amp;ScanDirectory($name);&lt;br /&gt;
            next;&lt;br /&gt;
        }	&lt;br /&gt;
        #jpg or jpeg&lt;br /&gt;
        elsif ($name =~ /^(.*)\.(jpe?g|bmp|tga|tif|raw)$/)&lt;br /&gt;
        {&lt;br /&gt;
            $rawname = $1;&lt;br /&gt;
            $ext = lc($2);&lt;br /&gt;
            $files++;&lt;br /&gt;
            print &amp;quot;\n----- Processing $name... -----&amp;quot;;&lt;br /&gt;
            &amp;amp;Convert($rawname,$ext,$delete);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
sub Convert&lt;br /&gt;
{&lt;br /&gt;
    my ($rawname, $ext) = @_;&lt;br /&gt;
    my @imageXY = split('x',`identify -format &amp;quot;%wx%h&amp;quot; &amp;quot;$rawname.$ext&amp;quot;`); &lt;br /&gt;
    my $imageX = pop(@imageXY);&lt;br /&gt;
    my $imageY = pop(@imageXY);&lt;br /&gt;
    my $optX;&lt;br /&gt;
    my $optY;&lt;br /&gt;
    my $ar;&lt;br /&gt;
    my $optar;&lt;br /&gt;
&lt;br /&gt;
    #landscape or square, search for optimal X&lt;br /&gt;
    if (($imageX &amp;gt;= $imageY) &amp;amp;&amp;amp; ($imageX != 0))&lt;br /&gt;
    {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageY / $imageX);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optX = &amp;amp;supportedXY($imageX);&lt;br /&gt;
        $optY = $optX * $optar;&lt;br /&gt;
        #both aspectratio and resolution are correct&lt;br /&gt;
        if(($imageX!=$optRes) || ($ar!=$optar))&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optY\xx$optX)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    #portrait, search for optimal Y&lt;br /&gt;
    elsif($imageY != 0)&lt;br /&gt;
    {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageX / $imageY);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optY = &amp;amp;supportedXY($imageY);&lt;br /&gt;
        $optX = $optY * $optar;&lt;br /&gt;
        #Needs conversion&lt;br /&gt;
        if(($imageY!=$optRes) || ($ar!=$optar))&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optX\xx$optY)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (($ext eq &amp;quot;jpg&amp;quot;) || ($ext eq &amp;quot;jpeg&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;\nConverting jpg to valid openjpeg (tga) format to handle... &amp;quot;;&lt;br /&gt;
        system(&amp;quot;imconvert -format tga \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.tga\&amp;quot;&amp;quot;);&lt;br /&gt;
        print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        if($delete==1)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        $ext=&amp;quot;tga&amp;quot;;&lt;br /&gt;
        $delete=2;&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;\nCreating .jp2 (jpeg2000) file... &amp;quot;;&lt;br /&gt;
    system(&amp;quot;image_to_j2k -i \&amp;quot;$rawname.$ext\&amp;quot; -o \&amp;quot;$rawname.jp2\&amp;quot; -r 20,10,1&amp;quot;);&lt;br /&gt;
    print &amp;quot;Done&amp;quot;;&lt;br /&gt;
    if($delete&amp;gt;0)&lt;br /&gt;
    {&lt;br /&gt;
        if($delete==1)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        elsif($delete==2)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting temporary .tga file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;--------------------------------\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
sub supportedAR&lt;br /&gt;
{&lt;br /&gt;
    my ($ar) = @_;&lt;br /&gt;
    my @arReference=(1.0,0.5,0.25,0.125,0.0625);&lt;br /&gt;
    my $arOptimal;&lt;br /&gt;
    my $arDivTemp=1.0;&lt;br /&gt;
    my $arDiv;&lt;br /&gt;
    #Get optimal aspect ratio&lt;br /&gt;
    foreach (@arReference)&lt;br /&gt;
    {&lt;br /&gt;
        $arDiv=abs($ar-$_);&lt;br /&gt;
        if($arDiv &amp;lt; $arDivTemp)&lt;br /&gt;
        {&lt;br /&gt;
            $arDivTemp=$arDiv;&lt;br /&gt;
            $arOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $arOptimal;&lt;br /&gt;
}  &lt;br /&gt;
sub supportedXY&lt;br /&gt;
{&lt;br /&gt;
    my ($res) = @_;&lt;br /&gt;
    my @resReference=(64.0,128.0,256.0,512.0,1024.0);&lt;br /&gt;
    my $resOptimal;&lt;br /&gt;
    my $resDivTemp=4096.0;&lt;br /&gt;
    my $resDiv;&lt;br /&gt;
    #Get optimal axis resolution&lt;br /&gt;
    foreach (@resReference)&lt;br /&gt;
    {&lt;br /&gt;
        $resDiv=abs($res-$_);&lt;br /&gt;
        if($resDiv &amp;lt; $resDivTemp)&lt;br /&gt;
        {&lt;br /&gt;
            $resDivTemp=$resDiv;&lt;br /&gt;
            $resOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $resOptimal;&lt;br /&gt;
} &lt;br /&gt;
if ( @ARGV &amp;gt; 1 )&lt;br /&gt;
{&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;/D&amp;quot;) || (@ARGV[0] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[1].&amp;quot;... (deleting old files) \n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[1],1);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;... (deleting old files) \n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[0]);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Provide just one directory argument, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
elsif ( @ARGV &amp;gt; 0 )&lt;br /&gt;
{&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;help&amp;quot;) || (@ARGV[0] eq &amp;quot;?&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;\nBatch convert images to opensim-compatible .jp2 files\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;perl jp2batch.pl [/D] [station:][path]dir\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  dir       Directory (and sub-directories) to search for image files.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  -D        If provided, old files will be deleted.\n\n\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Dependencies, these executables should be available in the PATH or directory of the script.\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  ImageMagick library functions: (note that I renamed one executable)\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.imagemagick.org/\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    imconvert.exe       originaly named convert.exe, but renamed due to a Windows batch-command conflict.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    identify.exe\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  OpenJpeg2000 library's J2K Codec: \n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.openjpeg.org/\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    image_to_j2k.exe\n\n\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;You must provide a directory to process, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;...\n&amp;quot;;&lt;br /&gt;
        $delete = 0;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[0]);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
    print &amp;quot;Provide a directory to process, optionally with '/D' argument...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
&lt;br /&gt;
Ofcourse almost all credit goes to the original author of this script. I just adjusted a few commands to make it work on Windows systems.&lt;/div&gt;</summary>
		<author><name>JeroenWaisMan</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Jp2_batch_converter_for_windows</id>
		<title>Jp2 batch converter for windows</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Jp2_batch_converter_for_windows"/>
				<updated>2008-08-20T18:46:18Z</updated>
		
		<summary type="html">&lt;p&gt;JeroenWaisMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
For how, why and where it is made for: please refer to the wikipage of the [[jp2_batch_converter|original script]].&lt;br /&gt;
&lt;br /&gt;
This is a modification of that script to make the system commands work on windows systems.&lt;br /&gt;
Also  a helpful /help explanation and optional /D command to delete the old files is added.&lt;br /&gt;
&lt;br /&gt;
Note: these are some quick adjustments to the original, it may or may not work, depending on your setup. It did work here.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* This script is a perl script, so you first should go and install that. ([http://www.perl.org/get.html|www.perl.org])&lt;br /&gt;
&lt;br /&gt;
* The ImageMagick executables for windows. ([http://www.imagemagick.org|www.imagemagick.org])&lt;br /&gt;
Please note that the 'convert.exe' executable conflicts with the FAT-to-NTFS batch command of windows.&lt;br /&gt;
This script will therefor seek a 'imconvert.exe' file in the PATH. Please rename it, or adjust the lines that start with:&lt;br /&gt;
 system(&amp;quot;imconvert ...&lt;br /&gt;
&lt;br /&gt;
* Openjpegs J2K Codec executables, more specifically: image_to_j2k.exe. ([http://www.openjpeg.org/index.php?menu=download|www.openjpeg.org])&lt;br /&gt;
&lt;br /&gt;
* References to all executables in the PATH environment variable. &lt;br /&gt;
This can be set trough Right-click My Computer-&amp;gt;Properties: Advanced tab-&amp;gt;Environment variables.&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
The script takes 2 arguments&lt;br /&gt;
&lt;br /&gt;
* An optional /D argument, if added the script will also delete the old image files&lt;br /&gt;
&lt;br /&gt;
* A required directory specified.&lt;br /&gt;
&lt;br /&gt;
* Or, you could start it with a /help command, which gives about the same info as this page.&lt;br /&gt;
&lt;br /&gt;
===Running===&lt;br /&gt;
Execute this from command prompt, optionally adding a /D argument for also deleting the source images.&lt;br /&gt;
 perl jp2batch.pl /D &amp;quot;c:\directory\with\images\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# jp2batch.pl&lt;br /&gt;
# OpenSim jp2 texture preparation script (for windows)&lt;br /&gt;
# Converts jpg/jpeg/bmp/tga files to valid jp2(jk2) files for SL&lt;br /&gt;
# Author: Phrearch, modified by Jeroen Waisman for Windows systems&lt;br /&gt;
# Credits: Tedd1, Phrearch&lt;br /&gt;
&lt;br /&gt;
$dirs=0;&lt;br /&gt;
$files=0;&lt;br /&gt;
$delete=0;&lt;br /&gt;
&lt;br /&gt;
sub ScanDirectory&lt;br /&gt;
{&lt;br /&gt;
    my ($workdir) = @_;&lt;br /&gt;
    local (@names);&lt;br /&gt;
    $dirs++;&lt;br /&gt;
    opendir(DIR, $workdir) or die &amp;quot;Unable to open $workdir:$!\n&amp;quot;;&lt;br /&gt;
    @names = readdir(DIR) or die &amp;quot;Unable to read $workdir:$!\n&amp;quot;;&lt;br /&gt;
    closedir(DIR);&lt;br /&gt;
    foreach my $tmpName (@names)&lt;br /&gt;
    {&lt;br /&gt;
        my $name = $workdir.&amp;quot;\\&amp;quot;.$tmpName;&lt;br /&gt;
        #\. or \.. in directory&lt;br /&gt;
        if ($tmpName =~ /^\.\.?$/)&lt;br /&gt;
        {&lt;br /&gt;
            next;&lt;br /&gt;
        }&lt;br /&gt;
        #directory&lt;br /&gt;
        elsif (-d $name)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;Entering directory $name\n&amp;quot;;&lt;br /&gt;
            &amp;amp;ScanDirectory($name);&lt;br /&gt;
            next;&lt;br /&gt;
        }	&lt;br /&gt;
        #jpg or jpeg&lt;br /&gt;
        elsif ($name =~ /^(.*)\.(jpe?g|bmp|tga|tif|raw)$/)&lt;br /&gt;
        {&lt;br /&gt;
            $rawname = $1;&lt;br /&gt;
            $ext = lc($2);&lt;br /&gt;
            $files++;&lt;br /&gt;
            print &amp;quot;\n----- Processing $name... -----&amp;quot;;&lt;br /&gt;
            &amp;amp;Convert($rawname,$ext,$delete);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
sub Convert&lt;br /&gt;
{&lt;br /&gt;
    my ($rawname, $ext) = @_;&lt;br /&gt;
    my @imageXY = split('x',`identify -format &amp;quot;%wx%h&amp;quot; &amp;quot;$rawname.$ext&amp;quot;`); &lt;br /&gt;
    my $imageX = pop(@imageXY);&lt;br /&gt;
    my $imageY = pop(@imageXY);&lt;br /&gt;
    my $optX;&lt;br /&gt;
    my $optY;&lt;br /&gt;
    my $ar;&lt;br /&gt;
    my $optar;&lt;br /&gt;
&lt;br /&gt;
    #landscape or square, search for optimal X&lt;br /&gt;
    if (($imageX &amp;gt;= $imageY) &amp;amp;&amp;amp; ($imageX != 0))&lt;br /&gt;
    {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageY / $imageX);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optX = &amp;amp;supportedXY($imageX);&lt;br /&gt;
        $optY = $optX * $optar;&lt;br /&gt;
        #both aspectratio and resolution are correct&lt;br /&gt;
        if(($imageX!=$optRes) || ($ar!=$optar))&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optY\xx$optX)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    #portrait, search for optimal Y&lt;br /&gt;
    elsif($imageY != 0)&lt;br /&gt;
    {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageX / $imageY);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optY = &amp;amp;supportedXY($imageY);&lt;br /&gt;
        $optX = $optY * $optar;&lt;br /&gt;
        #Needs conversion&lt;br /&gt;
        if(($imageY!=$optRes) || ($ar!=$optar))&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optX\xx$optY)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (($ext eq &amp;quot;jpg&amp;quot;) || ($ext eq &amp;quot;jpeg&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;\nConverting jpg to valid openjpeg (tga) format to handle... &amp;quot;;&lt;br /&gt;
        system(&amp;quot;imconvert -format tga \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.tga\&amp;quot;&amp;quot;);&lt;br /&gt;
        print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        if($delete==1)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        $ext=&amp;quot;tga&amp;quot;;&lt;br /&gt;
        $delete=2;&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;\nCreating .jp2 (jpeg2000) file... &amp;quot;;&lt;br /&gt;
    system(&amp;quot;image_to_j2k -i \&amp;quot;$rawname.$ext\&amp;quot; -o \&amp;quot;$rawname.jp2\&amp;quot; -r 20,10,1&amp;quot;);&lt;br /&gt;
    print &amp;quot;Done&amp;quot;;&lt;br /&gt;
    if($delete&amp;gt;0)&lt;br /&gt;
    {&lt;br /&gt;
        if($delete==1)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        elsif($delete==2)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting temporary .tga file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;--------------------------------\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
sub supportedAR&lt;br /&gt;
{&lt;br /&gt;
    my ($ar) = @_;&lt;br /&gt;
    my @arReference=(1.0,0.5,0.25,0.125,0.0625);&lt;br /&gt;
    my $arOptimal;&lt;br /&gt;
    my $arDivTemp=1.0;&lt;br /&gt;
    my $arDiv;&lt;br /&gt;
    #Get optimal aspect ratio&lt;br /&gt;
    foreach (@arReference)&lt;br /&gt;
    {&lt;br /&gt;
        $arDiv=abs($ar-$_);&lt;br /&gt;
        if($arDiv &amp;lt; $arDivTemp)&lt;br /&gt;
        {&lt;br /&gt;
            $arDivTemp=$arDiv;&lt;br /&gt;
            $arOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $arOptimal;&lt;br /&gt;
}  &lt;br /&gt;
sub supportedXY&lt;br /&gt;
{&lt;br /&gt;
    my ($res) = @_;&lt;br /&gt;
    my @resReference=(64.0,128.0,256.0,512.0,1024.0);&lt;br /&gt;
    my $resOptimal;&lt;br /&gt;
    my $resDivTemp=4096.0;&lt;br /&gt;
    my $resDiv;&lt;br /&gt;
    #Get optimal axis resolution&lt;br /&gt;
    foreach (@resReference)&lt;br /&gt;
    {&lt;br /&gt;
        $resDiv=abs($res-$_);&lt;br /&gt;
        if($resDiv &amp;lt; $resDivTemp)&lt;br /&gt;
        {&lt;br /&gt;
            $resDivTemp=$resDiv;&lt;br /&gt;
            $resOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $resOptimal;&lt;br /&gt;
} &lt;br /&gt;
if ( @ARGV &amp;gt; 1 )&lt;br /&gt;
{&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;/D&amp;quot;) || (@ARGV[0] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[1].&amp;quot;... (deleting old files) \n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[1],1);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;... (deleting old files) \n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[0]);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Provide just one directory argument, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
elsif ( @ARGV &amp;gt; 0 )&lt;br /&gt;
{&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;help&amp;quot;) || (@ARGV[0] eq &amp;quot;?&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;\nBatch convert images to opensim-compatible .jp2 files\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;perl jp2batch.pl [/D] [station:][path]dir\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  dir       Directory (and sub-directories) to search for image files.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  -D        If provided, old files will be deleted.\n\n\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Dependencies, these executables should be available in the PATH or directory of the script.\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  ImageMagick library functions: (note that I renamed one executable)\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.imagemagick.org/\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    imconvert.exe       originaly named convert.exe, but renamed due to a Windows batch-command conflict.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    identify.exe\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  OpenJpeg2000 library's J2K Codec: \n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.openjpeg.org/\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    image_to_j2k.exe\n\n\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;You must provide a directory to process, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;...\n&amp;quot;;&lt;br /&gt;
        $delete = 0;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[0]);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
    print &amp;quot;Provide a directory to process, optionally with '/D' argument...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
&lt;br /&gt;
Ofcourse almost all credit goes to the original author of this script. I just adjusted a few commands to make it work on Windows systems.&lt;/div&gt;</summary>
		<author><name>JeroenWaisMan</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Library_Preparation</id>
		<title>Library Preparation</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Library_Preparation"/>
				<updated>2008-08-20T18:40:28Z</updated>
		
		<summary type="html">&lt;p&gt;JeroenWaisMan: /* Converting Textures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Textures==&lt;br /&gt;
===Converting Textures===&lt;br /&gt;
The jp2 files used by the Secondlife client, are actually j2k files. These can be encoded by image_to_j2k from openjpeg. There is a [[jp2_batch_converter|Linux script]] or [[Jp2_batch_converter_for_windows|Windows script]] in perl, that does all the work for you. It uses imageMagick and image_to_j2k to make valid input files and converts them to j2k fileformat. It then renames the j2k file to jp2 extension, so these can be used within the viewer. &lt;br /&gt;
* Download the [http://www.tellim.com/texture_cd.tar.gz blender texture cd] (as an example)&lt;br /&gt;
* Prepare your imagefiles (jp2 files with 16,32,64,128,256,512,1024 resolution and aspect ratio's 1:1,1:2,1:4,1:8,1:16,1:32,etc. are supported)&lt;br /&gt;
* Copy the jp2 files(including directory-structures) into the /opt/opensim/library directory&lt;br /&gt;
&lt;br /&gt;
==Terrains==&lt;br /&gt;
===Create a terrain heightmap===&lt;br /&gt;
To create a terrain for a single region:&lt;br /&gt;
&lt;br /&gt;
* Create a NEW MAP by clicking on that icon in the title bar.&amp;lt;br&amp;gt;&lt;br /&gt;
* Highlight Design/Inflate, and click Next.&amp;lt;br&amp;gt;&lt;br /&gt;
* Make the size X=4, y=4. This will give you a 256x256 terrain, the same size as a region. Click Next.&amp;lt;br&amp;gt;&lt;br /&gt;
* Play with the sliders in the parameters window. You can just leave the defaults to start with. Click Next.&amp;lt;br&amp;gt;&lt;br /&gt;
* Check Design Map, and click OK.&amp;lt;br&amp;gt;&lt;br /&gt;
* Now click the CALC icon in the menu bar, then click OK.&amp;lt;br&amp;gt;&lt;br /&gt;
* You now have your terrain. If you don't like it, start over and play with the settings.&amp;lt;br&amp;gt;&lt;br /&gt;
* To save it: File=&amp;gt;Export=&amp;gt;Export Map.&amp;lt;br&amp;gt;&lt;br /&gt;
* Highlight Heightfield, and then click OK.&amp;lt;br&amp;gt;&lt;br /&gt;
* Choose File Format R32, then click the Options button.&amp;lt;br&amp;gt;&lt;br /&gt;
* Double click &amp;quot;Mode&amp;quot;, and select &amp;quot;float (meters)&amp;quot;, then click OK, and OK again.&amp;lt;br&amp;gt;&lt;br /&gt;
* Name the file whatever you want, and click OK to save it.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>JeroenWaisMan</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Jp2_batch_converter_for_windows</id>
		<title>Jp2 batch converter for windows</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Jp2_batch_converter_for_windows"/>
				<updated>2008-08-20T18:39:32Z</updated>
		
		<summary type="html">&lt;p&gt;JeroenWaisMan: New page: ==Description== Modified the system commands from Jp2Batch.pl to work on windows systems. Also added a helpful /help explanation and optional /D command to delete the old files.  For how, ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
Modified the system commands from Jp2Batch.pl to work on windows systems.&lt;br /&gt;
Also added a helpful /help explanation and optional /D command to delete the old files.&lt;br /&gt;
&lt;br /&gt;
For how, why and where it is made for: please refer to the wikipage of the [[jp2_batch_converter|original script]].&lt;br /&gt;
&lt;br /&gt;
Note: these are some quick adjustments to the original, it may or may not work, depending on your setup. It did work here.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* This script is a perl script, so you first should go and install that. ([http://www.perl.org/get.html www.perl.org])&lt;br /&gt;
&lt;br /&gt;
* The ImageMagick executables for windows. ([http://www.imagemagick.org www.imagemagick.org])&lt;br /&gt;
Please note that the 'convert.exe' executable conflicts with the FAT-to-NTFS batch command of windows.&lt;br /&gt;
This script will therefor seek a 'imconvert.exe' file in the PATH. Please rename it, or adjust the lines that start with:&lt;br /&gt;
 system(&amp;quot;imconvert ...&lt;br /&gt;
&lt;br /&gt;
* Openjpegs J2K Codec executables, more specifically: image_to_j2k.exe. ([http://www.openjpeg.org/index.php?menu=download www.openjpeg.org])&lt;br /&gt;
&lt;br /&gt;
* References to all executables in the PATH environment variable. &lt;br /&gt;
This can be set trough Right-click My Computer-&amp;gt;Properties: Advanced tab-&amp;gt;Environment variables.&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
The script takes 2 arguments&lt;br /&gt;
&lt;br /&gt;
* An optional /D argument, if added the script will also delete the old image files&lt;br /&gt;
&lt;br /&gt;
* A required directory specified.&lt;br /&gt;
&lt;br /&gt;
Also, it will react on a /help command, which gives about the same info as this page.&lt;br /&gt;
&lt;br /&gt;
===Running===&lt;br /&gt;
Execute this from command prompt, optionally adding a /D argument for also deleting the source images.&lt;br /&gt;
 perl jp2batch.pl [/D] &amp;quot;c:\directory\with\images\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# jp2batch.pl&lt;br /&gt;
# OpenSim jp2 texture preparation script (for windows)&lt;br /&gt;
# Converts jpg/jpeg/bmp/tga files to valid jp2(jk2) files for SL&lt;br /&gt;
# Author: Phrearch, modified by Jeroen Waisman for Windows systems&lt;br /&gt;
# Credits: Tedd1, Phrearch&lt;br /&gt;
&lt;br /&gt;
$dirs=0;&lt;br /&gt;
$files=0;&lt;br /&gt;
$delete=0;&lt;br /&gt;
&lt;br /&gt;
sub ScanDirectory&lt;br /&gt;
{&lt;br /&gt;
    my ($workdir) = @_;&lt;br /&gt;
    local (@names);&lt;br /&gt;
    $dirs++;&lt;br /&gt;
    opendir(DIR, $workdir) or die &amp;quot;Unable to open $workdir:$!\n&amp;quot;;&lt;br /&gt;
    @names = readdir(DIR) or die &amp;quot;Unable to read $workdir:$!\n&amp;quot;;&lt;br /&gt;
    closedir(DIR);&lt;br /&gt;
    foreach my $tmpName (@names)&lt;br /&gt;
    {&lt;br /&gt;
        my $name = $workdir.&amp;quot;\\&amp;quot;.$tmpName;&lt;br /&gt;
        #\. or \.. in directory&lt;br /&gt;
        if ($tmpName =~ /^\.\.?$/)&lt;br /&gt;
        {&lt;br /&gt;
            next;&lt;br /&gt;
        }&lt;br /&gt;
        #directory&lt;br /&gt;
        elsif (-d $name)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;Entering directory $name\n&amp;quot;;&lt;br /&gt;
            &amp;amp;ScanDirectory($name);&lt;br /&gt;
            next;&lt;br /&gt;
        }	&lt;br /&gt;
        #jpg or jpeg&lt;br /&gt;
        elsif ($name =~ /^(.*)\.(jpe?g|bmp|tga|tif|raw)$/)&lt;br /&gt;
        {&lt;br /&gt;
            $rawname = $1;&lt;br /&gt;
            $ext = lc($2);&lt;br /&gt;
            $files++;&lt;br /&gt;
            print &amp;quot;\n----- Processing $name... -----&amp;quot;;&lt;br /&gt;
            &amp;amp;Convert($rawname,$ext,$delete);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
sub Convert&lt;br /&gt;
{&lt;br /&gt;
    my ($rawname, $ext) = @_;&lt;br /&gt;
    my @imageXY = split('x',`identify -format &amp;quot;%wx%h&amp;quot; &amp;quot;$rawname.$ext&amp;quot;`); &lt;br /&gt;
    my $imageX = pop(@imageXY);&lt;br /&gt;
    my $imageY = pop(@imageXY);&lt;br /&gt;
    my $optX;&lt;br /&gt;
    my $optY;&lt;br /&gt;
    my $ar;&lt;br /&gt;
    my $optar;&lt;br /&gt;
&lt;br /&gt;
    #landscape or square, search for optimal X&lt;br /&gt;
    if (($imageX &amp;gt;= $imageY) &amp;amp;&amp;amp; ($imageX != 0))&lt;br /&gt;
    {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageY / $imageX);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optX = &amp;amp;supportedXY($imageX);&lt;br /&gt;
        $optY = $optX * $optar;&lt;br /&gt;
        #both aspectratio and resolution are correct&lt;br /&gt;
        if(($imageX!=$optRes) || ($ar!=$optar))&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optY\xx$optX)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    #portrait, search for optimal Y&lt;br /&gt;
    elsif($imageY != 0)&lt;br /&gt;
    {&lt;br /&gt;
        $ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageX / $imageY);&lt;br /&gt;
        $optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
        $optY = &amp;amp;supportedXY($imageY);&lt;br /&gt;
        $optX = $optY * $optar;&lt;br /&gt;
        #Needs conversion&lt;br /&gt;
        if(($imageY!=$optRes) || ($ar!=$optar))&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optX\xx$optY)... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;imconvert -resize ${optX}x${optY}! \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (($ext eq &amp;quot;jpg&amp;quot;) || ($ext eq &amp;quot;jpeg&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;\nConverting jpg to valid openjpeg (tga) format to handle... &amp;quot;;&lt;br /&gt;
        system(&amp;quot;imconvert -format tga \&amp;quot;$rawname.$ext\&amp;quot; \&amp;quot;$rawname.tga\&amp;quot;&amp;quot;);&lt;br /&gt;
        print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        if($delete==1)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        $ext=&amp;quot;tga&amp;quot;;&lt;br /&gt;
        $delete=2;&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;\nCreating .jp2 (jpeg2000) file... &amp;quot;;&lt;br /&gt;
    system(&amp;quot;image_to_j2k -i \&amp;quot;$rawname.$ext\&amp;quot; -o \&amp;quot;$rawname.jp2\&amp;quot; -r 20,10,1&amp;quot;);&lt;br /&gt;
    print &amp;quot;Done&amp;quot;;&lt;br /&gt;
    if($delete&amp;gt;0)&lt;br /&gt;
    {&lt;br /&gt;
        if($delete==1)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting old file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        elsif($delete==2)&lt;br /&gt;
        {&lt;br /&gt;
            print &amp;quot;\nDeleting temporary .tga file... &amp;quot;;&lt;br /&gt;
            system(&amp;quot;del \&amp;quot;$rawname.$ext\&amp;quot;&amp;quot;);&lt;br /&gt;
            print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    print &amp;quot;--------------------------------\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
sub supportedAR&lt;br /&gt;
{&lt;br /&gt;
    my ($ar) = @_;&lt;br /&gt;
    my @arReference=(1.0,0.5,0.25,0.125,0.0625);&lt;br /&gt;
    my $arOptimal;&lt;br /&gt;
    my $arDivTemp=1.0;&lt;br /&gt;
    my $arDiv;&lt;br /&gt;
    #Get optimal aspect ratio&lt;br /&gt;
    foreach (@arReference)&lt;br /&gt;
    {&lt;br /&gt;
        $arDiv=abs($ar-$_);&lt;br /&gt;
        if($arDiv &amp;lt; $arDivTemp)&lt;br /&gt;
        {&lt;br /&gt;
            $arDivTemp=$arDiv;&lt;br /&gt;
            $arOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $arOptimal;&lt;br /&gt;
}  &lt;br /&gt;
sub supportedXY&lt;br /&gt;
{&lt;br /&gt;
    my ($res) = @_;&lt;br /&gt;
    my @resReference=(64.0,128.0,256.0,512.0,1024.0);&lt;br /&gt;
    my $resOptimal;&lt;br /&gt;
    my $resDivTemp=4096.0;&lt;br /&gt;
    my $resDiv;&lt;br /&gt;
    #Get optimal axis resolution&lt;br /&gt;
    foreach (@resReference)&lt;br /&gt;
    {&lt;br /&gt;
        $resDiv=abs($res-$_);&lt;br /&gt;
        if($resDiv &amp;lt; $resDivTemp)&lt;br /&gt;
        {&lt;br /&gt;
            $resDivTemp=$resDiv;&lt;br /&gt;
            $resOptimal=$_;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $resOptimal;&lt;br /&gt;
} &lt;br /&gt;
if ( @ARGV &amp;gt; 1 )&lt;br /&gt;
{&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;/D&amp;quot;) || (@ARGV[0] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[1].&amp;quot;... (deleting old files) \n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[1],1);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;... (deleting old files) \n&amp;quot;;&lt;br /&gt;
        $delete = 1;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[0]);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Provide just one directory argument, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
elsif ( @ARGV &amp;gt; 0 )&lt;br /&gt;
{&lt;br /&gt;
    if((@ARGV[0] eq &amp;quot;help&amp;quot;) || (@ARGV[0] eq &amp;quot;?&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;\nBatch convert images to opensim-compatible .jp2 files\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;perl jp2batch.pl [/D] [station:][path]dir\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  dir       Directory (and sub-directories) to search for image files.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  -D        If provided, old files will be deleted.\n\n\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;Dependencies, these executables should be available in the PATH or directory of the script.\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  ImageMagick library functions: (note that I renamed one executable)\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.imagemagick.org/\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    imconvert.exe       originaly named convert.exe, but renamed due to a Windows batch-command conflict.\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    identify.exe\n\n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  OpenJpeg2000 library's J2K Codec: \n\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;  Available at http://www.openjpeg.org/\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;    image_to_j2k.exe\n\n\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    elsif((@ARGV[1] eq &amp;quot;/D&amp;quot;) || (@ARGV[1] eq &amp;quot;/d&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
        print &amp;quot;You must provide a directory to process, optionally with a /D argument...\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;...\n&amp;quot;;&lt;br /&gt;
        $delete = 0;&lt;br /&gt;
        &amp;amp;ScanDirectory(@ARGV[0]);&lt;br /&gt;
        print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    print &amp;quot;Syntax error\n&amp;quot;;&lt;br /&gt;
    print &amp;quot;Provide a directory to process, optionally with '-S' argument...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
&lt;br /&gt;
Ofcourse almost all credit goes to the original author of this script. I just adjusted a few commands to make it work on Windows systems.&lt;/div&gt;</summary>
		<author><name>JeroenWaisMan</name></author>	</entry>

	</feed>