2007年10月04日
ActionScriptで昭和写真化
基礎的な内容が続いてきたので、たまには応用例を。
最近、昭和の写真ジェネレータ(仮) が話題になりましたが、これの作り方が公開されています。
ならば、ActionScript 3.0 でやってみたくなるのが人情です。

いい具合ですね。ザ・昭和。
サーバー側の資源を使わずにこういうことができちゃうのは素敵じゃないでしょうか。
Flickr は crossdomain.xml を設置している ので、その辺と連携する ActionScript を書いてみても面白そうですね。
ソースは以下に(52行)。
package {
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.text.*;
public class ShowaPhoto extends Sprite {
[Embed(source="photo3.jpg")]
private var SamplePic:Class;
[Embed(fontName="7barSPBd", source="7barSPBd.TTF")]
private var SevenBarFont:Class;
public function ShowaPhoto() {
var bmp:Bitmap = new SamplePic();
var bmd:BitmapData = bmp.bitmapData;
// color transform
var colorTrans:ColorTransform = new ColorTransform(0.7, 0.7, 0.7, 0x44, 0x33, 0x22);
bmd.colorTransform(bmd.rect, colorTrans);
bmd.applyFilter(bmd, bmd.rect, new Point(), new BlurFilter(0.2, 0.2));
// add letter
var t:TextField = new TextField();
var tf:TextFormat = new TextFormat();
tf.size = 18;
tf.font = "7barSPBd";
tf.color = 0xffaa33;
t.defaultTextFormat = tf;
t.embedFonts = true;
t.text = "78 09 21";
var matrix:Matrix = new Matrix();
matrix.translate(bmd.width - t.textWidth - 10, bmd.height - t.textHeight - 5);
bmd.draw(t, matrix);
// add border
var bmd2:BitmapData = new BitmapData(bmd.width + 10, bmd.height + 10, false);
bmd2.fillRect(bmd2.rect, 0xffeedd);
matrix.identity();
matrix.translate(5, 5);
bmd2.draw(bmd, matrix);
// add noise
var bmdNoise:BitmapData = new BitmapData(bmd2.width, bmd2.height, false);
bmdNoise.noise(0, 0xee, 0xff, 7, true);
bmd2.draw(bmdNoise, null, null, "multiply");
// display
addChild(new Bitmap(bmd2)).filters = [new DropShadowFilter(4, 45, 45, 0.3)];
}
}
}