Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > Сохранение Movie Clip в отдельный swf файл


Автор: C4Grey 23.5.2007, 22:32
Привет, Homo Programaticus! Проблема, суть которой отображает название темы когда-то заинтересовала меня еще в начале изучения Action Script. И вот скачал Flash 9....Не подскажите - есть возможность сделать такую вещь под AS3? И еще одна просьба, немного к теме не относящаяся...Надо php скрипт для интеграуции сгенереного swf файла на серв. Обычно обхужусь следующим:
Flash:

var url_req:URLRequest = new URLRequest("http://127.0.0.1/img_create.php");
    url_req.data = png_image_data;
    url_req.method = URLRequestMethod.POST;
    var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
    url_req.requestHeaders.push(header);
    navigateToURL(url_req, "png");
---------------------------------------------------------------------------------------------------------------------------------------
img_create.php:

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

$image_data = $GLOBALS["HTTP_RAW_POST_DATA"] ;
$filename_to_save = "my_avatar.png";

if(isset($image_data)){
    $png_file = fopen($filename_to_save, "wb") or die("File not opened!");
    if($png_file){
          set_file_buffer($png_file, 20);
          fwrite($png_file, $image_data);
          fclose($png_file);
    }
}
    
    echo("<br><img src=".$filename_to_save."?".time().">");
?>

---------------------------------------------------------------------------------------------------------------------------------------
Это припомощи одного товарища было написано для сохранения png - картинки на сервере. В php не очень разбираюсь, поэтому и задаю такой вопрос... :(

Автор: AlDev 24.5.2007, 06:52
C4Grey, от мувика можно получить ByteArray - тут была подобная тема.
А по коду ты получаешь изображение...
Маленько не понял сути вопроса ) Опиши плиз задачу целиком

Автор: C4Grey 24.5.2007, 15:17
Спасибо за заинтересованность AlDev!
В приведенном коде я действительно получал изображение png формата...Кроме того я тоже использовал ByteArray -

var png_image_data:ByteArray = PNGEncoder.encode(data_bmp);

где data_bmp - BitmapData, a PNGEncoder - .as скрипт, скачаный с
http://www.kaourantin.net/2005/10/png-encoder-in-as3.html

Но данный код сохранит одиночную картинку...Меня же интерисует сохранение всего MoviClip. Если с с изпользованием  ByteArray такое возможно - иду читать мануалы...Если же нет - прошу сообщить, если можно...

Если надо - навожу пример: Есть swfка, в которой одна кнопка и один MovieClip(пусть будет mc) (кнопка не обязательна, можно поставить обработчик на MovieClip). Надо создать функцию, которая будет создавать swf файл с mc. Сохранять файл будет php скрипт (смотрите изначальный вопрос). 

Автор: AlDev 24.5.2007, 15:33
http://flasher.ru/forum/archive/index.php/t-89794.html

PS: PNGEncoder вообще есть тут
http://labs.adobe.com/svn/flashplatform/?/projects/corelib/trunk/src/actionscript3/com/adobe/images/

Автор: C4Grey 24.5.2007, 19:38
Спасибо!Почти разобрался...Вот только на форуме человек писал насчет возрвращения null ldr.contebtом.Вот и я с той же проблемой столкнулся smile. Да и флеш интересную ошибочку выдает:

TypeError: Error #2007: Parameter bytes must be non-null.
    at flash.display::Loader/flash.display:Loader::_loadBytes()
    at flash.display::Loader/loadBytes()
    at 2png_enc_CS3_fla::MainTimeline/sendImage()

Там какие-то исходники кто-то передавал - ссылка на них вроде есть, но она не работает...
p.s.
Код я нагло скопировал, только название swfки изменил

Автор: C4Grey 24.5.2007, 20:33
Я тут немного модифицировал код, разобрался, поексперементировал...В результате получил прогу которая загружает мувик по ссылке причем через BINARY, после чего при помощи stage.addChild отображает клип...Вот только моим скромным запросам это не сильно отвечает...
Мне надо было сохранить мувик в ОТДЕЛЬНЫЙ SWF ФАЙЛ...А получил я загрузку мувиков :(
Кстати по указаной ссылке я уже ходил - я этот форум полностю по теме АS3 перерыл...короче помогите кто может!

Автор: AlDev 25.5.2007, 03:51
C4Grey, а этот самый ByteArray если как swf сохранить? Это на грани фантастики конечно... 
Но если сформировать ByteArray, отдать серверу, а на сервере сделать swf используя его... 
можно по идее билдить swf-ку на сервере (на adobe labs лежит серверный компонент)

Автор: C4Grey 25.5.2007, 10:51
Спасибо AlDev! Все - иду на аддоб...Если с сервером не разберусь буду писать еще...

Автор: C4Grey 25.5.2007, 17:57
Я долго лазил по адоб лабс...И, к сожелению ничего так и не нашел...Если есть ссылка, поделитесь пожалуйста...И, если можно 2 вопроса по ByteArray:

1.как в него мувик загнать по - нормальному? а то у меня при проверке длину выдает всегда одну и ту же....я сильно подозреваю что записывается он коряво :(
2.Как с ByteArray мувик на сцену вывести?

Автор: AlDev 28.5.2007, 02:34
C4Grey, http://labs.adobe.com/wiki/index.php/Flex_Module_for_Apache_and_IIS

Кроме описаного на flasher.ru другого способа, к сожалению, не знаю

Автор: C4Grey 28.5.2007, 16:18
AlDev, спасибо...иду изучать сервер.

Автор: C4Grey 30.5.2007, 20:24
Тут по ходу изучения возникла большая проблема...Я пытался загнать мувик в ByteArray двумя способами:

1.Взято с flesher: 
Код

var url:URLRequest = new URLRequest("movie.swf");
var ld:Loader = new Loader();
var ul:URLLoader = new URLLoader();
ul.dataFormat = URLLoaderDataFormat.BINARY;
ul.load(url);
ld.loadBytes(ul.data);

2. С предыдущей темы:
Код

var BA:ByteArray = new ByteArray();
BA.writeObject(mc);


Как я не пытался - в первом URLLoader (trace (ul.bytesLoaded);) дает 0, а во втором ByteArray - 1...
Вроде все реализовано по мануалах от макромедиа...и все равно не пашет...щас сижу, пытаюсь что-то сделать методом тыка...Если знаете в чем ошибка - дайте хоть код правильный пожалуйста...

Автор: C4Grey 31.5.2007, 17:08
Все! Вопрос решен!Как оказалось ничего сложного не было...просто над было использовать writeBytes вместо writeObject smile Привожу код программы, если тема хоть - кого - то кроме AlDeva интересует...

1.AS3:

Код

import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;

var ByteLoader:URLLoader;
var ByteConverter:Loader;
var ByteConverter2:Loader;
var FileRequest:URLRequest;
var ba:ByteArray = new ByteArray;

function convert(event:Event)
{
//function BytesExample (event:Event) { 
ByteLoader = new URLLoader();
ByteLoader.dataFormat = URLLoaderDataFormat.BINARY;
ByteLoader.addEventListener (Event.COMPLETE, onBytesLoaded);
FileRequest = new URLRequest ("mov.swf");
ByteLoader.load (FileRequest);
//}

function onBytesLoaded (evt:Event) 
{
ByteConverter = new Loader();
ByteConverter.contentLoaderInfo.addEventListener (Event.COMPLETE, onConvertFinished);
ByteConverter.loadBytes (ByteLoader.data);
ba.writeBytes(ByteLoader.data);
//urla

    var url_req:URLRequest = new URLRequest("http://127.0.0.1/img_create.php");
    url_req.data = ba;
    url_req.method = URLRequestMethod.POST;
    var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
    url_req.requestHeaders.push(header);
    navigateToURL(url_req, "png");

}

function onConvertFinished (evt:Event) 
{
var mc = ByteConverter.content;
trace (ba);
mc.x = 0;
mc.y = 0;
mc.alpha = .75;
addChild (mc);
}
}
bt.addEventListener(MouseEvent.CLICK, convert);


2.PHP:

Код

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

$image_data = $GLOBALS["HTTP_RAW_POST_DATA"] ;
$filename_to_save = "avatar.swf";

if(isset($image_data)){
    $png_file = fopen($filename_to_save, "wb") or die("File not opened!");
    if($png_file){
          set_file_buffer($png_file, 20);
          fwrite($png_file, $image_data);
          fclose($png_file);
    }
}
    
    echo("<br><img src=".$filename_to_save."?".time().">");
?>


AlDev - большое спасибо!

Автор: PROCESSOR 5.7.2007, 12:22
Эти скрипты сохраняются любой MovieClip  в SWF ?

А если я хочу его скомпрессировать или хотябы текст в полях - это нереально наверно ?

Автор: AntonioBanderaz 5.7.2007, 12:40
Цитата(PROCESSOR @  5.7.2007,  12:22 Найти цитируемый пост)
А если я хочу его скомпрессировать или хотябы текст в полях - это нереально наверно 

 В каких полях?

По поводу сжатия ASCrypt

Автор: PROCESSOR 6.7.2007, 01:56
Юзер написал текст в Input поле - и я хочу его скомпрессировать и записать в swf на сервер.
Также как FLASH делает - он все тексты компресииирует же при PUBLISH.

Или хотябы на стороне PHP реально ли это сделать ?

Автор: AntonioBanderaz 6.7.2007, 11:50
Слушай а зачем тебе это?

Автор: PROCESSOR 6.7.2007, 13:38
Админ редактор сайта на FLASH. .  Т.е. юзер изменяет текст своего сайта через этот редактор.
Обычный то есть, но простой без компрессии текстов.

Автор: C4Grey 10.7.2007, 01:39
PROCESSOR , посмотри FlashMyAdmin - там куча фу-ций такого типа есть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)