خانه » ادوبی فلش » ذخیره محتویات MovieClip به صورت عکس

ذخیره محتویات MovieClip به صورت عکس

ذخیره محتویات MovieClip به صورت عکس

در این مطلب نحوه ذخیره محتویات یک MovieClip به صورت عکس با فرمت JPEG در Air آموزش داده می‌شود. برای این کار با استفاده از  کلاسه Adobe Encoder یک ByteArray از محتویات MovieClip می‌سازیم و در ادامه این ByteArray را با فرمت JPEG ذخیره می‌کنیم.



دانلود کلاس های مورد نیاز

1- برای شروع فایل corelib.zip را دانلود کرده و آن را Extract کنید.

۲- برنامه Flash را اجرا کنید و یک پروژه جدید از نوع Air بسازید.

۳- از منوی File گزینه ActionScript Settings را انتخاب کنید.

۴- از پنل Library path روی دکمه Add New Path کلیک کنید سپس روی دکمه Browse to SWC file کلیک کنید و فایل corelib.swc را انتخاب کنید.




۵- روی دکمه OK کلیک کنید تا پنجره ActionScript Settings بسته شود.

۶- روی فریم اول کلیک کنید و پنل Actions را باز کنید.

۷- کلاسه‌های مورد نیاز را Import کنید.

import flash.display.BitmapData;
import com.adobe.images.JPGEncoder;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;

8- یک متغیر از نوع BitmapData ایجاد کنید و طول و عرض آن را به اندازه MovieClip در نظر بگیرید و با دستور Draw محتویات MovieClip را به BitmapData منتقل کنید. (به جای my_mc نام MovieClip خود را وارد نمایید)

var bd:BitmapData = new BitmapData(my_mc.width, my_mc.height);
bd.draw(my_mc);

9- یک متغیر جدید از نوع JPGEncoder ایجاد کنید. (عدد داخل پرانتز کیفیت فایل خروجی را مشخص می‌کند و ماکزیمم آن ۱۰۰ می‌باشد)، در ادامه یک متغیر ByteArray هم بسازید.

var jpgEncoder:JPGEncoder = new JPGEncoder( 100 );
var byteArray:ByteArray = jpgEncoder.encode( bd );
  • به وسیله متغیرJPGEncoder محتویات BitmapData به فرمت JPEG تبدیل می‌شود و سپس در متغیر ByteArray قرار می‌گیرد.
var file:File = new File();
file = file.resolvePath("c:/test.jpg");
var stream:FileStream = new FileStream();

11- به وسیله کدهای زیر مراحل ذخیره سازی را به اتمام برسانید. در این کدها ابتدا File به صورت FileMode.WRITE در پروژه جاری می‌شود سپس به وسیله دستور writeBytes اطلاعات تبدیل شده ByteArray ذخیره می‌شود. دستور try و catch هم به منظور نمایش خطاهای احتمالی به کار گرفته شده است.

try
{
	stream.open( file , FileMode.WRITE);
	stream.writeBytes(byteArray);
	stream.close();
}
catch (e:Error)
{
	trace("Error: " + e.message);
}
Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

14 نظر

  1. سلام
    آموزشتون عالی بود.
    فقط من خیلی حرفه ای نیستم
    میشه یه کم دربارهمتغیر ها و طریغه ایجادشون توضیح بدید؟
    ممنون

  2. سلام
    اکشن اسکریپت ۲ این هم هست؟

  3. سلام
    ممنون از مطالب مفیدتون.
    چرا این دستور وقتی خروجی exe میگیریم کار نمی کنه؟
    علاوه بر این وقتی عکسی رو که ذخیره میکنه باز میکنم کامل نیست فقط یه تیکه از عکس هست در حالیکه mc در وسط صفحه کاری و هم اندازه آن هست
    و اندازه فایل خروجی رو هم توی دستور کامل میدم، یعنی سایز درسته ولی قسمت عمده ای از عکس ذخیره شده سفید هست و فقط گوشه از عکس در سمت راست و بالای صفحه ذخیره شده هست.
    مطلب دیگه اینکه این کار رو توی صفحه معمولی فلش نمیشه انجام داد فقط باید توی محیط air باشه؟

    • سلام ؛ باید Projector ی که با آن فایل exe را می سازید فلش پلیر جدید باشد
      خیر بدون ایر هم قابل فعالیت است
      استاندارد اندازه گزاری به صورت گوشه بالا سمت چپ است
      موفق و پیروز باشید

      • با سلام و تشکر از توجه تون
        من با فلش cs5 کار می کنم و فلش پلیر ۱۰. از این ورژن باید جدیدتر باشه تا کار کنه؟
        علاوه بر این فقط swf موقعی که برنامه فلش باز هست تصویر رو ذخیره میکنه ولی اگه فایل swf رو جدا اجرا کنی باز هم ذخیره نمی کنه و ارور زیر رو میده
        VerifyError: Error #1014: Class flash.filesystem::File could not be found.
        در ضمن استاد من کدهای شما رو تو فایل فلشی معمولیfla( غیر Air ) کپی کردم کار نکرد و ارورهای زیر روداد
        Scene 1, Layer ‘Layer 1’, Frame 1, Line 2 1172: Definition com.adobe.images:JPGEncoder could not be found.
        Scene 1, Layer ‘Layer 1’, Frame 1, Line 2 1172: Definition com.adobe.images:JPGEncoder could not be found.
        Scene 1, Layer ‘Layer 1’, Frame 1, Line 10 1046: Type was not found or was not a compile-time constant: JPGEncoder.
        Scene 1, Layer ‘Layer 1’, Frame 1, Line 10 1180: Call to a possibly undefined method JPGEncoder.

        ممنون میشم راهنمایی بفرمایید.البته در حد مبتدی

        با پوزش یه سوال دیگه داشتم.
        توی as3 دستوری هست که با آن بجای کدهای بالا که فایل رو ذخیره میکنن یه عکس jpg رو از توی library فلش مستقیم توی کامپیوتر کپی کنه
        باز هم تشکر

        • سلام
          پوشه com که مربوطه به کلاس های مورد نیاز هست را کنار فایل fla خود قرار دهید
          فکر می کنم مشکل فقط از این مورد باشد
          فلش این درسترسی را ندارد ولی AIR این امکان را به راحتی دارد
          موفق و پیروز باشید

  4. سلام
    استاد با تشکر و پوزش مجدد
    من باید فایل رو روی سی رایت کنم و از طریق این دستور mc را بصورت jpge توی temp ذخیره کنم بنابراین فایل fla رو نمیتونم همراه سی دی بدم.
    نکته مهم تر اینکه پوشه com رو از کجا کنار swf قرار بدم.من پوشه com رو پیدا نکردم
    ببخشید اذیتتون میکنم

    • سلام
      پوشه com باید زمان کامپایل کنار فایل fla شما باشد بعد از آن نیازی به آن نیست فایل swf شما کافی است ، فایل fla فقط برای تولید هست و سورس ذخیره شماست و نیازی نیست آن را جایی قرار دهید
      در ضمن کلاسی که در پروژه استفاده شده است را باید داشته باشید که در پوشه com کنار نمونه مربوطه بوده است توی نت هم سرچ کنید فایل های کلاس هست
      برای این که پروژه مالتی مدیا داشته باشید و این کار را کنید باید از برنامه هایی مثل MDM Zinc و… برای تبدیل فلش به exe استفاده کنید
      موفق و پیروز باشید

  5. سلام
    ببخشید من هر چی عکس وارد فلش می کنم تار میشه یعنی چی خواب می خوام با کیفیت باشه یا مثلا کوچیک بزرگ که می کنم هم اینجوری میشه چه کار کنم

    • سلام
      در صورتی که تصویری وارد فلش می کنید سعی کنید به سایز مورد نظر وارد کنید ، در غیر این صورت برای تغییر سایز و یا متحرک کردن و به صورت محصوس زمانی که شی تصویری چرخش داده می شود دچار مشکل در نمایش و پرش در شی خواهید شد ، برای رفع می توانید از افکت هایی مثل Blur برای زمان چرخش ها استفاده کنید ، ولی در کل برای بهترین نمایش بهتر هست از تصاویر وکتوری استفاده کنید که هیچ محدودیتی در کار با آن در فلش نداشته باشید و البته حجم کمتری نیز داشته باشید
      موفق و پیروز باشید

  6. سلام
    خیلی عالی بود
    اگه بخوام آدرس ذخیره رو از کاربر بگیرم چه دستوری باید به جای
    file.resolvePath(“c:/test.jpg”)
    بزارم
    با تشکر

    • سلام دوست عزیز

      به این نمونه که مثلا ادوبی برای استفاده از کلاس FileReference هست توجه کنید، به اهم موارد و رویداد های FileReference پرداخته شده است. البته نمونه مربوطه به آپلود هست.

      package {
          import flash.display.Sprite;
          import flash.events.*;
          import flash.net.FileFilter;
          import flash.net.FileReference;
          import flash.net.URLRequest;
      
          public class FileReferenceExample extends Sprite {
              private var uploadURL:URLRequest;
              private var file:FileReference;
      
              public function FileReferenceExample() {
                  uploadURL = new URLRequest();
                  uploadURL.url = "http://www.[yourDomain].com/yourUploadHandlerScript.cfm";
                  file = new FileReference();
                  configureListeners(file);
                  file.browse(getTypes());
              }
      
              private function configureListeners(dispatcher:IEventDispatcher):void {
                  dispatcher.addEventListener(Event.CANCEL, cancelHandler);
                  dispatcher.addEventListener(Event.COMPLETE, completeHandler);
                  dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
                  dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                  dispatcher.addEventListener(Event.OPEN, openHandler);
                  dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                  dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                  dispatcher.addEventListener(Event.SELECT, selectHandler);
                  dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler);
              }
      
              private function getTypes():Array {
                  var allTypes:Array = new Array(getImageTypeFilter(), getTextTypeFilter());
                  return allTypes;
              }
      
              private function getImageTypeFilter():FileFilter {
                  return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
              }
      
              private function getTextTypeFilter():FileFilter {
                  return new FileFilter("Text Files (*.txt, *.rtf)", "*.txt;*.rtf");
              }
      
              private function cancelHandler(event:Event):void {
                  trace("cancelHandler: " + event);
              }
      
              private function completeHandler(event:Event):void {
                  trace("completeHandler: " + event);
              }
      
              private function uploadCompleteDataHandler(event:DataEvent):void {
                  trace("uploadCompleteData: " + event);
              }
      
              private function httpStatusHandler(event:HTTPStatusEvent):void {
                  trace("httpStatusHandler: " + event);
              }
              
              private function ioErrorHandler(event:IOErrorEvent):void {
                  trace("ioErrorHandler: " + event);
              }
      
              private function openHandler(event:Event):void {
                  trace("openHandler: " + event);
              }
      
              private function progressHandler(event:ProgressEvent):void {
                  var file:FileReference = FileReference(event.target);
                  trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
              }
      
              private function securityErrorHandler(event:SecurityErrorEvent):void {
                  trace("securityErrorHandler: " + event);
              }
      
              private function selectHandler(event:Event):void {
                  var file:FileReference = FileReference(event.target);
                  trace("selectHandler: name=" + file.name + " URL=" + uploadURL.url);
                  file.upload(uploadURL);
              }
          }
      }
      

      موفق و پیروز باشید

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه