2009.03.04
category
comments

写真をミニチュア風に加工してみる

技術的なエントリーは久しぶりだなー。CBCNETで連載されているtrick7teraさんの記事が面白かったので、自分なりにやってみる。この表現って素敵ですよね。記事にもあるようにPhotoshopでの参考サイトがあるので、これに忠実にActionScript3で再現してみる。元画像はこちら

まずは画像をムービークリップに内包してステージにインスタンス名を「photo」にして配置。Tweenerでコントラストと彩度と明度を調整する。次にこのmcをBitmapDataでキャプチャしてコピー。コピーにも色を同じように調整して、ブラーをかける。新たにに円形グラデーション用のmcを作ってscaleYを半分にして楕円型にする。マスクするmcとマスクされるmcの両方にcacheAsBitmapをtrueに設定。最後にマスクをかけて完成と。

package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.display.GradientType;
	import flash.geom.Matrix;

	import caurina.transitions.Tweener;
	import caurina.transitions.properties.ColorShortcuts;
	import caurina.transitions.properties.FilterShortcuts;

	public class Main extends Sprite
	{

		public function Main():void
		{
			ColorShortcuts.init();
			FilterShortcuts.init();

			setToyFilter();
		}

		private function setToyFilter():void
		{
			//-----[色調整 ボケなし]
			Tweener.addTween(photo, { _contrast:0.6, _saturation:1.6, _brightness:0.2 } );

			//-----[キャプチャしてコピー]
			var bmd:BitmapData = new BitmapData(photo.width, photo.height);
			bmd.draw(photo);

			var bm:Bitmap = new Bitmap(bmd);
			var sp:Sprite = new Sprite();
			sp.addChild(bm);
			addChild(sp);
			sp.x = photo.x;
			sp.y = photo.y;
			swapChildren(photo, sp);

			//-----[色調整 ボケあり]
			Tweener.addTween(sp, { _contrast:0.6, _saturation:1.6, _brightness:0.2, _Blur_blurX:5, _Blur_blurY:5, _Blur_quality:2 } );

			//-----[グラデーションマスクの設定]
			var gmask:Sprite = new Sprite();
			var radius:uint = photo.width / 1.5;
			var scale:Number = 1.0 / 1638.4 * radius * 2;
			var m:Matrix = new Matrix();

			m.identity();
			m.scale(scale , scale);

			addChild(gmask);
			gmask.x = photo.x + photo.width / 2;
			gmask.y = photo.y + photo.height / 2;
			gmask.scaleY = 0.5;

			gmask.graphics.lineStyle();
			gmask.graphics.beginGradientFill(
				GradientType.RADIAL,
				[0x000000, 0x818181, 0xFFFFFF],
				[1.0, 0.4, 0],
				[120, 200, 255],
				m
			);
			gmask.graphics.drawCircle(0, 0 , radius);
			gmask.cacheAsBitmap = true;
			photo.cacheAsBitmap = true;
			photo.mask = gmask;
		}
	}
}

参考サイトでは被写体をパスで切り抜いて輪郭を強調してるけどFlashではそこまで出来ないのでピンのゆるさはご愛敬。写真素材をそれっぽいの使えば、擬似的に似せることは出来そうだなー。

追記
northprintさんがwonderflPixel Bender版を公開されてます。こちらも勉強になります。

6 Comments

  1. bee Says

    Pixel Benderにどっぷりハマりたいと思う今日この頃。

    ミニチュア風写真は本城直季さんの活躍でその面白さが広まりましたよね。そして一度は自分でやってみたくなる。久しぶりに「本城直季」で検索したら、今年のドコモのカレンダーに採用されてるみたいですよ。

  2. Pixel Benderでミニチュア風景もどき

    いつの間にか3月も過ぎてしまいましたね。。。Progressionのカスタムシー…

  3. simo Says

    >beeさん
    この表現初めて見た時はやられました。こんな見え方になるなんて。ドコモカレンダーいいですね!個人的にはこれも好きです。力士がかわいくて。w

  4. [...] 福岡は 5ive の simo さんが主催をしてくださいますよ。simoさんは東京にいてらした時に、僕がやってる”ゆる~い”東京てら子に何度も参加してくださってたので、福岡でも「気軽な集会感」はいい感じにキープしつつ、さくっとこんなのも作れてしまうスキルもお持ちなお人なので、どうぞ皆様参加せれ。 募集は atnd(アテンド)サイト上にて。 [...]

  5. [...] >>上のを実装したらしい [...]

  6. [...] 参考サイト 5ive http://www.5ive.info/blog/archives/381 [...]

Post a comment




Comment

Trackbacks

この記事のコメント・トラックバックRSS