Get Adobe Flash player
Главная » Flash Обучение » Flash Уроки Текстом » Сохраняем картинку из Flash посредством PHP (ActionScript 3)

Как создать?

Подпишитесь сейчас и вы получите на email серию бесплатных видеоуроков по flash.

Ваш e-mail:

Ваше имя на русском:

Подписавшись, Вы получите 4 видео урока, которые научат вас создавать flash презентации, flash баннеры, flash кнопки буквально за несколько минут!

Курс по flash cs5

 

Adobe Flash CS4 и Actionscript 3.0. Полный курс видео уроков.

Внимание!

Вы можете изучить все секреты flash анимации всего за 3 недели! Перейти из разряда новичка в разряд опытного пользователя даже без посещения дорогих курсов и чтения толстенных талмудов.

110 видео уроков,

в превосходном качестве помогут пройти, Вам, терни flash анимации самым быстрым и легким путём!

+ActionScript 3.0

Подробнее!..

www.megastock.ru
Уведомление об ответственности

Текст перед: bob24 обход блокировки :Текст после

Сохраняем картинку из Flash посредством PHP (ActionScript 3)

SarGun   8 апреля 2009    Раздел сайта: Flash Обучение » Flash Уроки Текстом

Всем привет!! Я думаю много кто задавался вопросом как сохранить изображение из Flash в файл(в этом уроке в файл *.jpg). Так же, в этом уроке я использую ООП (Объектно Ориентированное Программирование), т.е. Мы напишем класс SaveToFile, который будет собирать информацию о цветах пикселей мувиклипа и отправлять в скрипт PHP.

У ВАС ОБЯЗАТЕЛЬНО ДОЛЖЕН СТОЯТЬ СЕРВЕР ПОДДЕРЖИВАЮЩИЙ СКРИПТЫ PHP(У меня стоит Apache 2.0.58).

Если Вы не знакомы с классами — советую сначала изучить!

Поехали...

Для начала создайте папку где будут находится все файлы, к примеру saveImage. Далее в этой папке создайте ещё папку с именем src(в ней будет находится наш класс).

Создайте новый проэкт ActionScript 3 и сохраните его в папку saveImage под именем SaveToFile.fla. Теперь, рисуем на рабочем поле что угодно, что Вы хотите сохранить, или импортируйте картинку. Теперь переводим картинку в мувиклип и даём ему имя mc. Теперь создадим динамическое текстовое поле для сообщений от скрипта, и присвоим ему имя status_txt. Сдесь осталось добавить кнопку, при нажатии которой и будет происходить сохранение. Для это перетащите из списка компонентов компонент Button и присвойте ему имя save_btn. Вот что у меня вышло:

Сохраняем картинку из Flash посредством PHP (ActionScript 3)

В свойствах рабочего поля впишем используемый класс, который мы далее напишем:

alt

Теперь создаём файл ActionScript file:

Сохраняем картинку из Flash посредством PHP (ActionScript 3)

 

И сохраняем в папку src под именем SaveToFile.

И пешем в нём этот код:

package src{
/////// ИМПОРТ ВСПОМОГАТЕЛЬНЫХ КЛАССОВ //////////
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.events.*;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import flash.net.*;
/////////////////////////////////////////////////
////// ОБЪЯВЛЕНИЕ КЛАССА //////
public class SendToFile extends Sprite {
////// ОБЪЯВЛЕНИЕ СВОЙСТВ КЛАССА /////////
private var myBitmapData:BitmapData;
private var byteArr:ByteArray;
//////////////////////////////////////////
////// КОНСТРУКТОР КЛАССА ////////////////
public function SendToFile():void {
//новый объект BitmapData с размерами равными мувиклипу на рабочем поле
myBitmapData=new BitmapData(mc.width,mc.height);
//отрисовываем в объект BitmapData мувиклип
myBitmapData.draw(mc);
//слушаем событие нажатия на кнопку сохранить
save_btn.addEventListener(MouseEvent.MOUSE_DOWN, downSave);
}
//////////////////////////////////////////
//////// ОБЪЯВЛЕНИЕ МЕТОДОВ КЛАССА ///////
//функция при нажатии на кнопку сохранить
private function downSave(e:MouseEvent):void{
//вызов функции организующей массив пикселей и
//отправляющей его в PHP скрипт
saveImage();
}
//функция отправки картинки в скрипт
private function saveImage():void {
//массив для пикселей
var pixels:Array = new Array();
//ширина картинки
var w:Number=mc.width;
//высота картинки
var h:Number=mc.height;
//перебираем все пиксели и добавляем их в массив pixels
for (var a:int = 0; a <= w; a++) {
for (var b:int = 0; b <= h; b++) {
//записываем значение цвета пикселя в 16-ричной форме
var tmp=myBitmapData.getPixel(a,b).toString(16);
pixels.push(tmp);
}
}
//путь для скрипта
var url:URLRequest=new URLRequest("save.php");
//создаём объект данных, которые будем отправлять
var variables:URLVariables = new URLVariables();
//добавляем в объект данных переменную img в которую
//записываем массив пикселей и сразу переводим массив в строку
variables.img=pixels.toString();
//добавляем в объект данных высоту картинки
variables.height=h;
//добавляем в объект данных ширину картинки
variables.width=w;
//присваиваем объект данных variables в качестве передаваемых данных
url.data=variables;
//указываем метод отправки
url.method=URLRequestMethod.POST;
//создаём объект URLLoader
var loader:URLLoader = new URLLoader();
//даём знать что возвращённые данный будут текстом
loader.dataFormat=URLLoaderDataFormat.TEXT;
//отправляем
loader.load(url);
//слушатель завершения отправки
loader.addEventListener(Event.COMPLETE, saveComplete);
//пока картинка сохраняется виден текст Сохранение...
status_txt.text = "Сохранение...";
}
//функция завершения отправки
function saveComplete( e:Event ):void {
var loader:URLLoader=URLLoader(e.target);
//присваиваем текстовому полю текст переданный скриптом
status_txt.text=loader.data;
}
//////////////////////////////////////////
}
///////////////////////////////
}
 

Теперь сохраняем всё , делаем публикацию swf и html. Остальное дело за скриптом PHP.

Создаём в папке saveImage текстовый документ и пишем в него:

<?php
$data = explode(",", $_POST['img']);
$width = $_POST['width'];
$height = $_POST['height'];
$image=imagecreatetruecolor( $width ,$height );
$background = imagecolorallocate( $image ,0 , 0 , 0 );
//Copy pixels
$i = 0;
for($x=0; $x<=$width; $x++){
for($y=0; $y<=$height; $y++){
$int = hexdec($data[$i++]);
$color = ImageColorAllocate ($image, 0xFF & ($int >> 0x10), 0xFF & ($int >> 0x8), 0xFF & $int);
imagesetpixel ( $image , $x , $y , $color );
}
}
//picture.jpg - имя(можно любое)
$rr=imageJPEG($image, "picture.jpg", 100);
if($rr){
//эта строка передаётся во флеш если картинка сохранена успешно
echo('Ваше фото успешно сохранено');
}else{
echo('Не удалось сохранить фото');
}
imagedestroy( $image );

 

Вот и всё! Закидываем файлы на сервер и проверяем!

Если всё правильно сделали в текстовом поле выдается текст:

Сохраняем картинку из Flash посредством PHP (ActionScript 3)

Исходные файлы: saveimage.rar [49,62 Kb] (cкачиваний: 911)

Возникнут вопросы обращайтесь... )

icq: 420260217

Просмотров: 16146 | Комментарии (14) | flash урок, actionscript 3, php
#1   vitkuz      8 апреля 2009 10:57   ICQ: --   



Регистрация: 17.07.2008
Публикаций: 100
Комментариев: 164
Ну вот, осталось это прикрутить к твоему граффити ) И можно вконтакт продавать )

За пост спасибо ) ОЧЕНЬ ПОЛЕЗНО! Сам не знал, ща буду пробовать.

PS:
Хотел порекомендовать бесплатный хостинг с поддержкой php и MYSQL и без рекламы для подобных эксперементов

http://realms.biz/

C народом и сравнивать нечего! В сто тысяч раз лучше dance3
#2   SarGun      8 апреля 2009 13:48   ICQ: 420260217   



Регистрация: 10.12.2008
Публикаций: 12
Комментариев: 60
юху! то что нужно пасиб!


--------------------
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html
#3   Aloran      24 апреля 2009 12:04   ICQ: --   



Регистрация: --
Публикаций: 0
Комментариев: 0
Классный урок!!! Мне очень понравился!!! clapping
#4   TeT      5 июня 2009 15:58   ICQ: 8096403   



Регистрация: 8.02.2009
Публикаций: 23
Комментариев: 128
Подскажите, а если использовать файл php не загружая его на сервер ? Можно сделать что бы сохранялось ?


--------------------
Keyboard not found. Press any key to continue
#5   Fly      5 июня 2009 16:42   ICQ: --   



Регистрация: 21.07.2008
Публикаций: 66
Комментариев: 600
Можно этот момент протестировать с помощью ДЕНВЕРа: denwer.ru


--------------------
1) Админ всегда прав
2) Если админ не прав, смотри пункт 1

Мы в контакте - http://vkontakte.ru/club9573247
Не отвечаю на вопросы в личку касаемо Flash, у нас для этого есть форум
#6   SarGun      19 июля 2009 10:31   ICQ: 420260217   



Регистрация: 10.12.2008
Публикаций: 12
Комментариев: 60
Цитата: TeT
Подскажите, а если использовать файл php не загружая его на сервер ? Можно сделать что бы сохранялось ?

нет нельзя!!!


--------------------
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html
#7   dr.S      13 октября 2009 14:52   ICQ: --   



Регистрация: --
Публикаций: 0
Комментариев: 0
Цитата: TeT
Подскажите, а если использовать файл php не загружая его на сервер ? Можно сделать что бы сохранялось ?
с пхп нельзя.
saveFile.save(...,"....png"); что-то вроде, например. с 10й версии плеера начиная - можно локально %)
#8   Neirol      24 октября 2009 23:18   ICQ: 407672443   



Регистрация: 14.09.2009
Публикаций: 20
Комментариев: 150
Можно, как уже сказал dr.S сначала сохранить с помощью saveFile, а относительный путь переделать в абсолютный и дать пользователю на скачку. =)


--------------------
Написал программу? Проверь на ошибки. Исправил ошибки? Проверь еще раз. Нет ошибок? Ты плохой программист!

http://prograph.ru/ - видео уроки по программированию в разных средах, а также справочники, программы и новости.

http://vkapi.easyflash.org/ - Как научиться создавать свои собственные flash-приложения, использующие ВКонтакте API и взаимодействие с веб-сервером?
#9   tracker      22 марта 2010 03:05   ICQ: --   



Регистрация: --
Публикаций: 0
Комментариев: 0
Не скачиваются исходники :-(
#10   Fly      25 марта 2010 10:16   ICQ: --   



Регистрация: 21.07.2008
Публикаций: 66
Комментариев: 600
Почему не скачиваются? Попробуйте правой кнопкой а потом выбрать сохранить как


--------------------
1) Админ всегда прав
2) Если админ не прав, смотри пункт 1

Мы в контакте - http://vkontakte.ru/club9573247
Не отвечаю на вопросы в личку касаемо Flash, у нас для этого есть форум
#11   besuhoff      30 мая 2010 11:39   ICQ: --   



Регистрация: --
Публикаций: 0
Комментариев: 0
плохо, что данные передаются в виде строки. получается, между клиентом и сервером неоправданно большой поток траффика идет, для сохранения 30-килобайтной картинки требуется почти мегабайт. оптимизировать бы
#12   as3coder      31 января 2011 08:58   ICQ: --   



Регистрация: 26.01.2010
Публикаций: 0
Комментариев: 2

А вот способ сохранения без участия сервера "Сохранение изображения на ActionScript 3.0"



--------------------
as3coder.blogspot.com
#13   aligarh      21 июля 2011 11:40   ICQ: --   



Регистрация: --
Публикаций: 0
Комментариев: 0
У меня 1/4 часть рисунка сохраняется нижний правый угол, не понял в чем дело
#14   Dimansel      10 октября 2011 16:30   ICQ: --   



Регистрация: --
Публикаций: 0
Комментариев: 0
as3coder, спасибо большое!
этот способ намного удобней =) 

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.