Страница 1 из 1

Простое приложение:редактор аватара пользователя Вк.

Добавлено: 29 авг 2012, 20:16
Foxmen
Редактор фотографии пользователя
ApiConnection,AS3.

Этот урок является продолжением к моему первому уроку(http://flapps.ru/forum/topic3587.html)
Приложение загружает профильную фотографию пользователя из контакта и позволяет поставить на нее обычную картинку, затем сохраняет результат в профиль пользователя.

Первый шаг
Создайте папку с названием changephoto.
Теперь нужно создать .as фаил,назвать его Main.as и сохранить в папке changephoto.
Прокомментированный код ниже,поместите его в Main.as

Код: Выделить всё

 package {    import flash.display.*;    import flash.events.*;    import flash.utils.ByteArray;    import flash.net.URLRequest;    import flash.net.URLRequestHeader;    import flash.net.URLRequestMethod;    import flash.net.URLLoader;    import flash.system.LoaderContext    import flash.system.ApplicationDomain    import vk.api.serialization.json.JSON;    import vk.api.MD5;    import vk.APIConnection;    import vk.events.*;    import vk.ui.*;    import vk.PNGEncoder;     import vk.MultipartURLLoader;    import vk.MultipartURLLoaderEvent;    import vk.api.serialization.json.JSON;    //папку vk можно найти в исходнике.      public class Main extends Sprite    {         public var uploadphoto:VKButton; //обычная кнопка        public var loader:Loader = new Loader();        public var urlforpost:String;//Адрес, на который будем отправлять фотографию, чтобы загрузить в профиль         public var urlofphoto:String;//адрес аватара        public var api_id:Number;        public var viewer_id:Number;        public var sid:String;        public var secret:String;        public var changephotobtn:VKButton; //обычная кнопка        public var profilephoto:Bitmap; //фотография пользователя        public var brr:ByteArray;        //получаем flashvars        public var flashVars:Object = stage.loaderInfo.parameters as Object;        //инициализация        public var VK:APIConnection = new APIConnection(flashVars);         public function Main()        {            //переменные приложения             api_id = flashVars['api_id'];            viewer_id = flashVars['viewer_id'];            sid = flashVars['sid'];            secret = flashVars['secret'];            //получаем адрес, на который будем отправлять картинку            VK.api('photos.getProfileUploadServer', {}, geturl, onError);         }        private function geturl(data:Object):void        {            urlforpost = data.upload_url;            //получаем фотографию пользователя с профиля             VK.api('getProfiles', {uids:viewer_id,fields:'photo_big'}, geturlofprofilephoto, onError);         }         private function geturlofprofilephoto(data:Object):void        {                         urlofphoto = data[0]['photo_big'];            //загружаем фотографию            var loaderContext:LoaderContext = new LoaderContext();            loaderContext.checkPolicyFile = true            loader.load(new URLRequest(urlofphoto),loaderContext);            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,dobtn);         }        function dobtn(e:Event):void        {            //помещаем фотографию на сцену, используя BitMapData.             var bmp:Bitmap = loader.content as Bitmap;             profilephoto = new Bitmap(bmp.bitmapData);             addChild(profilephoto);             addChild(img);//небольшой костыль, просто могут возникнуть проблемы с "наложением" картинок друг на друга..              //позволяем перетаскивать картинку на профильную фотографию..              img.addEventListener(MouseEvent.MOUSE_DOWN, sdrag);             function sdrag(e:MouseEvent):void            {                img.startDrag();            }            img.addEventListener(MouseEvent.MOUSE_UP, stdrag);            function stdrag(e:MouseEvent):void            {                img.stopDrag();            }                            changephotobtn = new VKButton("Изменить аватар"); // при нажатии на эту кнопку, фотография сохранится в профиль.             changephotobtn.x = 400;            addChild(changephotobtn);            //сохраняем            changephotobtn.addEventListener(MouseEvent.CLICK,save);         }         function save(e:MouseEvent):void        {            var raw:BitmapData = new BitmapData(loader.width,loader.height);//"фотографируем" область где находится аватар, чтобы понять как расположена картинка            raw.draw(stage);            brr = PNGEncoder.encode(raw);            changephoto(urlforpost,brr);        }         public function changephoto(Url:String,brr:ByteArray):void        {            var mll:MultipartURLLoader = new MultipartURLLoader();            mll.addFile(brr, "file.jpg", "photo", 'image/jpg');            mll.load(Url);            mll.addEventListener(Event.COMPLETE, loadComplete);           }        function loadComplete(e:Event):void        {            var loader:URLLoader = MultipartURLLoader(e.currentTarget).loader;            var response = JSON.decode(loader.data);            consol.text = response.photo;            VK.api('photos.saveProfilePhoto', {server:response.server,photo:response.photo,hash:response.hash}, savephoto, onError);         }         private function savephoto(data:Object):void        {            trace("OK");        }        private function onError(data:Object):void        {            consol.text = data.error;        }    } } 
Код не совсем "чистый", есть ошибки по оформлению и некоторым приемам, но прошу не судить строго, он работает, для понятия общих принципов вполне подходит.

Второй шаг
Теперь нужно создать .fla фаил назвать redaktor.fla и сохранить в папке changephoto.
В этом файле на сцену поместить следующие объекты:динамическое текстовое поле и назвать его consol и любую картинку, которую пользователи будут ставить на аватар и назвать ее img.
В папку change photo, поместить папку vk, которую можно найти в исходнике.
Все, компилируем и заливаем в Контакт.

Настройки приложения: включено и видно всем, без использования контейнера.
Само приложение можно увидеть здесь: http://vk.com/app3102056
Исходник: http://webfile.ru/6097041


p.s помогите разработать шахматный движок: http://flapps.ru/forum/topic5644.html

Re: Простое приложение:редактор аватара пользователя Вк.

Добавлено: 18 мар 2014, 09:18
CK1002
Исходник не найден, перезалей