Merhaba arkadaşlar ;

Bugün size AS3 Core Library 'den bahsetmek istiyorum. Sizinde bildiğiniz gibi internet üzerinde birçok flash için geliştirilmiş class dosyaları mevcut ve bizler bu class'ları çalışmalarımıza import ederek gerekli metodlarıyla kullanabiliyoruz. En meşhur olanlarından biri papervision3D olarak belirtebilirim. Flash içerisinde olmayan 3Boyutlu uygulamaları çeşitli matematiksel işlemlerle veya video çekimleriyle sağlayan bu class altyapısı için sitesindeki demolara göz atabilirsiniz. Özellikle 360 derecelik altta gösterdiğim kamera ile çeşitli açılarla eş zamanlı çekilen videolarla olan etkileşimli flash video uygulaması muazzam olmuş.



Benim size bahsetmek istediğim AS3 Core Library , Actionscript üzerine geliştirilen JSON ile iletişim ve image işleme sınıflarını da barındıran bir class yapısı. Bu class ile flash içerisinde o an bulunan bir görseli ziyaretçi bilgisayarına veya servera kaydedebiliyorsunuz. Öncelikle bu işlemler için as3corelib kütüphanesini alttaki adresten indirip ClassPath olarak mesela çalışmanız fla dosyasının yanına com klasörünü eklemeniz gerekiyor. FLA çalışmanızda ilk satırda

import com.adobe.images.JPGEncoder

diyerek o classı classpath denen ya çalışmanız fla adresinin yanına ya da C:\Program Files\Adobe\Adobe Flash CS4\en\First Run\Classes/ klasörünün altına (ki burası default MovieClip,Date,Array,Math classlarınızın bulunduğu adrestiir) kopyalamanızdır.

http://code.google.com/p/as3corelib/

AS3 Core Library kullanarak Draw API'lerle çizdirdiği bir resmin çıktısını almayı anlatan Henry Jones , bu örnekle benim anlatacağım Webcam örneğine çok benzeyen şekilde kullanmış ona da göz atabilirsiniz.


http://henryjones.us/articles/using-the-as3-jpeg-encoder


Ben Türkçe bir uygulama aradım biraz googling ile ama JSON dışında AS3 Core Library'i anlatan olmamış.Ben kısaca kodu anlatayım. kopyala fonksiyonu 3 adet parametre alıyor.Bunlar m:MovieClip sahneden alabileceğiniz ve görsel olacak movieclip instance name'i.q kalite karşılık geliyor 100 üzerinden görsel kalitesi ve çıkacak dosyanın adı.


import com.adobe.images.JPGEncoder;
function kopyala(m:MovieClip, q:Number, fileName:String)
{
var jpgSource:BitmapData = new BitmapData (m.width, m.height);
jpgSource.draw(m);
var jpgEncoder:JPGEncoder = new JPGEncoder(q);
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);

var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");

var jpgURLRequest:URLRequest = new URLRequest ("jpg.php?name=" + fileName + ".jpg");
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;

var jpgURLLoader:URLLoader = new URLLoader();
navigateToURL(jpgURLRequest, "_blank");
}


Buraya kadar jpg.php dosyasının yardımıyla sahnemizde bulunan bir MovieClip'i bir jpeg olarak kaydettirecek fonksiyonu tamamladık. jpg.php dosyasının içeriği de :

if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];

header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename=".$_GET['foto']);
echo $jpg;
}


Şimdi bir webcam görüntüsü almak istiyoruz düye düşünelim.Yoksa sahnedeki herhangi bir movieclipte olabilir. Webcam görüntüsü için


var video1:Video=new Video();
var kamera:Camera=Camera.getCamera();
video1.attachCamera(kamera);
addChild(video1);

kodları yeterli olacaktır.Ancak video1 bir video objesi olduğundan onu da kopyala fonksiyonumuz Movie Clip nesnesi parametre aldığından video1_mc adlı bir movieclip içerisine getireceğim kod biraz uzayacak ama mantık aynı.


var video1:Video=new Video();
var kamera:Camera=Camera.getCamera();
video1.attachCamera(kamera);

var video_mc:MovieClip = new MovieClip()
addChild(video_mc);
video_mc.addChild(video1);


ziyaretçi ekranında çıkacak uyarı:(2 farklı webcam varsa dışarıdan takılan ilk çalışır bu ekrandan ziyaretçinin değiştirmesi lazım biz seçemiyoruz)



ve sonuç :)



Buarada ek bir bilgi Webcam'i anlık bir poz yakalamak için null parametresi gönderiyoruz Foto çekme efektleri yapabilirsiniz alttaki ek kod satırıyla.

video1.attachCamera(null)


Sahneye bir foto_btn ekleyip ona tıklanınca cek fonksiyonuyla kopyala fonksiyonuna 3 adet parametre gönderiyoruz ve anasahnedeki video1_mc instance name'ine sahip MovieClip'i %90 kalitede foto adıyla kaydediyor.


foto_btn.addEventListener(MouseEvent.CLICK,cek)

function cek(e:Event)
{

kopyala(video_mc, 90, "foto");
}


İşte bir webcam görüntüsünü kaydeden bir uygulamamız bu kadardı.Ayrıca ziyaretçinizin kaydettiği bu görseli kendi serverınıza da ziyaretçiye seçtirerek File Reference metoduyla yükletebilirsiniz. File Reference hakkındaki yazım için :

http://ercanaltug.blogspot.com/2009/05/flash-icerisinden-dosya-yukletmek-file.html



Faydalı olması dileğiyle...