This is somewhat of a sneak peak, I hope that no one gets their panties in a bunch about it.

Skaargarden.com
It was a really long time since i saw some quality material put in the pipe. Hope that they fare well in todays competitive market.


/////////////////////////////////////////////////////////
// Extrude Weightcutter, v1.1, Extrude Interactive, 2010
// Author: Sven-Erik Jonsson, svenerik@extrude.se
/////////////////////////////////////////////////////////
bringToFront();
var oldUnits = preferences.rulerUnits;
var startDisplayDialogs = displayDialogs;
preferences.rulerUnits = Units.PIXELS;
displayDialogs = DialogModes.NO;
var files = File.openDialog('Choose files to resize', '*.*', true);
if (files)
{
var userImageSize = prompt('Target image size','Enter image size');
var targetImageSize = (!isNaN(parseInt(userImageSize))) ? parseInt(userImageSize) : 1280;
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = 8;
for (var i = 0; i < files.length; i++)
{
var currFile = files[i];
if (currFile.exists)
{
open(currFile);
try
{
if (activeDocument.mode != DocumentMode.RGB) activeDocument.changeMode(ChangeMode.RGB);
if (activeDocument.bitsPerChannel != BitsPerChannelType.EIGHT) activeDocument.bitsPerChannel = BitsPerChannelType.EIGHT;
activeDocument.flatten();
try { activeDocument.convertProfile("sRGB IEC61966-2.1", Intent.PERCEPTUAL, true, true); }
catch(e) {}
var portrait = (activeDocument.height > activeDocument.width);
if (!portrait) activeDocument.resizeImage( targetImageSize, null, 300, ResampleMethod.BICUBIC );
else activeDocument.resizeImage( null, targetImageSize, 300, ResampleMethod.BICUBIC );
var asCopy = (activeDocument.name.toString().indexOf(".jpg") > -1);
activeDocument.saveAs(activeDocument.path, jpgSaveOptions, asCopy);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
catch(e)
{
alert(e);
}
}
}
}
// Leave no crap behind
displayDialogs = startDisplayDialogs;
preferences.rulerUnits = oldUnits;
purge(PurgeTarget.ALLCACHES);
0)? input.text.substring(input.selectionEndIndex, input.text.length) : "";
// Enter the codes to change here
// Below is Swedish keyboard
switch (event.text)
{
case "2" : event.text = "@"; break;
case "3" : event.text = "£"; break;
case "4" : event.text = "$"; break;
case "5" : event.text = "€"; break;
case "6" : event.text = "6"; break;
case "7" : event.text = "{"; break;
case "8" : event.text = "["; break;
case "9" : event.text = "]"; break;
case "0" : event.text = "}"; break;
case "+" : event.text = "\\"; break;
case "<" : event.text = "|"; break;
default : break;
}
input.text = startText + event.text + endText;
input.setSelection(input.selectionBeginIndex + 1, input.selectionBeginIndex + 1);
}
catch (error:Error)
{
trace(error.getStackTrace());
}
}
}
}
}


public function setTransform( x0:Number , y0:Number , x1:Number , y1:Number , x2:Number , y2:Number , x3:Number , y3:Number ):voidAfter some thinking I came up with a somewhat simple quick-fix to a wall specific problem. With a bit of tinkering you'll easily be able to add vertical correction too, if that floats your boat. Anyway... enjoy.
{
var w:Number = texture.width;
var h:Number = texture.height;
var dx30:Number = x3 - x0;
var dy30:Number = y3 - y0;
var dx21:Number = x2 - x1;
var dy21:Number = y2 - y1;
var l:Number = poly.length;
while( --l > -1 )
{
var point:Object = poly[ l ];
var gx:Number = (( point.x - _xMin ) / w);
var gy:Number = ( point.y - _yMin ) / h;
var bx:Number = x0 + gy * ( dx30 );
var by:Number = y0 + gy * ( dy30 );
point.sx = bx + gx * ( ( x1 + gy * ( dx21 ) ) - bx );
point.sy = by + gx * ( ( y1 + gy * ( dy21 ) ) - by );
}
render();
}
public function setTransform( x0:Number , y0:Number , x1:Number , y1:Number , x2:Number , y2:Number , x3:Number , y3:Number ):voidDuring this project I also came across some creative ways to apply subtle sharpening to images in flash. Post a comment or something if you're interested.
{
var w:Number = texture.width;
var h:Number = texture.height;
var dx30:Number = x3 - x0;
var dy30:Number = y3 - y0;
var dx21:Number = x2 - x1;
var dy21:Number = y2 - y1;
var l:Number = poly.length;
// Calculate the facing angle of the quad.
var dangle:Number = ((Math.atan2(dy30 - dy21, x2 - x0) * (180/Math.PI)) / 90);
while( --l > -1 )
{
var point:Object = poly[ l ];
var gx:Number = (( point.x - _xMin ) / w);
var gy:Number = ( point.y - _yMin ) / h;
// Quadraticly shift the triangles x-ward into the perspective depending on the facing angle
var gxshift:Number = (gx * (1 - Math.abs(dangle))) + (Math.pow(gx, 2) * Math.abs(dangle));
if (dangle > 0) gxb = 1 - gxb;
var bx:Number = x0 + gy * ( dx30 );
var by:Number = y0 + gy * ( dy30 );
// Apply the new coordinates
point.sx = bx + gxshift * ( ( x1 + gy * ( dx21 ) ) - bx );
point.sy = by + gxshift * ( ( y1 + gy * ( dy21 ) ) - by );
}
render();
}