⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jp2batch.pl

📁 jp2batch.rar pl 原码
💻 PL
字号:
#!/usr/bin/perl -s -U# jp2batch.pl# OpenSim jp2 texture preparation script# Converts jpg/jpeg/bmp/tga files to valid jp2(jk2) files for SL# Author: Phrearch# Credits: Tedd1 $dirs=0;$files=0; sub ScanDirectory{  my ($workdir) = @_;  local (@names);  $dirs++;opendir(DIR, $workdir) or die "Unable to open $workdir:$!\n";@names = readdir(DIR) or die "Unable to read $workdir:$!\n";closedir(DIR);	foreach my $tmpName (@names){	my $name = $workdir."/".$tmpName;		#\. or \.. in directory		if ($tmpName =~ /^\.\.?$/){		next;		}			#directory		if (-d $name){		print "Entering directory $name\n";		&ScanDirectory($name);		next;		}			#jpg or jpeg		if ($name =~ /^(.*)\.(jpe?g|bmp|tga|tif|raw|png)$/){		$rawname = $1;		$ext = lc($2);		$files++;		print "\nProcessing $name...";		&Convert($rawname,$ext);		}	} } sub Convert{my ($rawname, $ext) = @_;my @imageid = split(/ /,`identify $rawname.$ext`); my @imageXY = split('x',@imageid[2]);my $imageX = pop(@imageXY);my $imageY = pop(@imageXY);my $optX;my $optY;my $ar;my $optar;  	#landscape or square, search for optimal X	if ($imageX >= $imageY){	$ar = sprintf("%.4f",$imageY / $imageX);	$optar =  &supportedAR($ar);	$optX = &supportedXY($imageX);	$optY = $optX * $optar;		#both aspectratio and resolution are correct		unless(($imageX==$optRes) && ($ar==$optar)) {		print "\nResizing ($imageX\xx$imageY => $optY\xx$optX)...";		system(`convert -resize ${optX}x${optY}! $rawname.$ext $rawname.$ext >/dev/null`);		print "Done";		}	} 	#portrait, search for optimal Y	else {	$ar = sprintf("%.4f",$imageX / $imageY);	$optar =  &supportedAR($ar);	$optY = &supportedXY($imageY);	$optX = $optY * $optar;		#Needs conversion		unless(($imageY==$optRes) && ($ar==$optar)) {		print "\nResizing ($imageX\xx$imageY => $optX\xx$optY)...";		system("convert -resize ${optX}x${optY}! $rawname.$ext $rawname.$ext >/dev/null");		print "Done";		} 	}	if (($ext eq "jpg") || ($ext eq "jpeg") || ($ext eq "png")){	print "\nConverting jpg to valid openjpeg format...";	system("convert -format tga $rawname.$ext $rawname.tga >/dev/null");	system("rm $rawname.$ext >/dev/null");	print "Done";	$ext="tga";	}print "\nCreating jp2 file...";system("image_to_j2k -i $rawname.$ext -o $rawname.j2k -r 20,10,1 >/dev/null");system("mv $rawname.j2k $rawname.jp2 >/dev/null");system("rm $rawname.$ext >/dev/null");print "Done\n";} sub supportedAR{my ($ar) = @_;my @arReference=(1.0,0.5,0.25,0.125,0.0625);my $arOptimal;my $arDivTemp=1.0;my $arDiv;	#Get optimal aspect ratio	foreach (@arReference){	$arDiv=abs($ar-$_);		if($arDiv < $arDivTemp) {		$arDivTemp=$arDiv;		$arOptimal=$_;		}	}return $arOptimal;}   sub supportedXY{my ($res) = @_;my @resReference=(64.0,128.0,256.0,512.0,1024.0);my $resOptimal;my $resDivTemp=4096.0;my $resDiv;	#Get optimal axis resolution	foreach (@resReference){ 	$resDiv=abs($res-$_);		if($resDiv < $resDivTemp) {		$resDivTemp=$resDiv;		$resOptimal=$_;		}	}return $resOptimal;}  if ( @ARGV > 0 ){print "Processing ".@ARGV[0]."...\n";&ScanDirectory(@ARGV[0]);print "\nDirectories scanned:$dirs\nFiles processed:$files\n" ;}else {print "Provide a directory to process...\n";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -