Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Проблема с определением размера фото, загруженного в UIloader
Flash Zone Forum > Macromedia Flash > ActionScript
Antoxer_92
Ребят столкнулся с такой проблемой Определения размера фото, которое загружается в UIloader!

Вот код!!!


uil_photo - находится на сцене

uil_photo.addEventListener(Event.COMPLETE, changeZ);
uil_photo.source = "Тут адрес фотки";

function changeZ(e:Event):void // Определяем размер 
{
var uiLdr:UILoader = e.currentTarget as UILoader;
var newW:Number = uiLdr.content.width;
var newH:Number = uiLdr.content.height;
trace(String(newW) + " * " + String(newH));
//(Тут дальше мой код)
}

Этот пример был взят с сайта хелпа адоба, но там сказано, что Если загрузка содержимого выполняется из другого домена (изолированной программной среды), свойства содержимого могут быть недоступны по соображениям безопасности 

("Данный код работает во флэше но вот в браузере не хочет работать")

Как это исправить?

Ребят помогите пожалуйста!!! Может кто нибудь сталкивался с такой проблемой.
chingachgoog
/forum/index.php?showto...amp;#entry11951
Antoxer_92
Я почитал там!!!

Ваще Адоб както глупо сделал: саму фотку можно грузить и без файла политик откуда угодно, а свойства фотки такие как её размер можно считать только при наличии вашего домена в файле политик на сервере откуда грузится фотка.

Понял, что единственным способом обойти это является использование дополнительного php скрипта, т.к. фотки в юилоадер грузятся(в моём случае) с серверов "Вконтакте" а у них естественно в файле политики безопасности не прописан тот домен откуда запускается приложение или у них его ваще нет - этого уж я не знаю чё как там.

Так как к примеру мне обойти это?:

Т.е. я из флэшки должен посылать адрес фотки в пхп скрипт, пхп грузит эту фотку и отправляет её в флэшку!!!

Так вот я только не знаю как её принять в флэшке и засунуть в юилоадер!!!

ведь Когда мы её уже приняли и засунули в юиоадер мы можем сразу использовать свойство content(где и содержится размер фотки), не дожидаясь события Event.COMPLETE, а не как обычно: после присвоения свойства source юилоадера грузится фотка, после загрузки срабатывает событие Event.COMPLETE, после которого нам и доступны размеры фотки!!!

Подскажите пожалуйста как её принять из php и засунуть в юилоадер


Вот так к примеру я посылаю адрес фотки:

var variables:URLVariables = new URLVariables("password=" + MyPassword + "&do=loadPhoto&url=" + url);
var request:URLRequest = new URLRequest();
request.url = ip; // ------------------------- -  тут мой айпишник
request.method = URLRequestMethod.POST;
request.data = variables;

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, zagruzka);
loader.load(request);

function zagruzka(e:Event):void
{
// Как фотку тут принять?
}
chingachgoog
Я такие высокоуровневые штуки как UIloader не использую. smile.gif
Но проблему попробовал бы решить так (при помощи URLLoader и Loader:


Код
ext_photo = new URLLoader(new URLRequest(path)) // path - Путь к внешней фотке
ext_photo.dataFormat=URLLoaderDataFormat.BINARY
ext_photo.addEventListener(Event.COMPLETE, extLoaded)

private function extLoaded(e:Event):void { // Данные мы получили, теперь грузим их заново сами в себя!
    var loader:Loader = new Loader()
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, introReady)
    loader.loadBytes(ext_photo.data);
}

private function introReady (e:Event):void {
    var sourceData:DisplayObject = DisplayObject((e.target as LoaderInfo).content)
    // Собственно можно считывать параметры sourceData
}


Или так как по ссылке выше, только через Loader, а вместо URLLoader - loader.contentLoaderInfo.bytes
Antoxer_92
chingachgoog , спасибо за скрипт!!! Я так понял он вообще без PHP скрипта работает (мы просто грузим во флэш то что уже загрузили! Получается вторая загрузка уже не требует никакого наличия файла политик на серваке, т.к. мы грузим данные(фотку) уже из самой флэшки)

Но он так же не дает доступ к контенту!!!

НА компе работает, но в Вконтакте попрежнему не доступны свойства контента!!!!

Может безопасность флэшплеера ваще ужесточили и этот обход предусмотрели, у меня вроде 11-ый толи 10.3 стоит!!!

Придёца мне все фотки грузить на мой сервак, записывать на них ссылку в баззу данных и грузить их по этот ссылке(но теперь уже с моего сервака, где есть файл политик) smile.gif

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

chingachgoog
Цитата(Antoxer_92 @ 13.11.2011 - 21:14) *
Но он так же не дает доступ к контенту!!!


Да, это работает без всяких серверных скриптов.

А что имеется в виду под доступом к контенту? Только ширина и высота? Должна считываться. Или что-то другое?
Что он показывает в свойствах sourceData? Выдает ошибку безопасности?

PS

Можно еще так попробовать написать:

Код
loader.loadBytes(ext_photo.data, new LoaderContext(false, ApplicationDomain.currentDomain));


add:

Ага. Все-таки URLLoader тут не катит. Ну тогда переходим к плану "Б" о котором я говорил выше и на который изначально была дана ссылка и - вуаля - все работает:

Код
package
{
    import flash.display.*
    import flash.events.*
    import flash.net.*
    import flash.text.*;
    import flash.system.*
    
    
    /**
     * ...
     * @author chingachgoog@mail.ru
     */
    public class Main extends Sprite
    {        
        public function Main():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private var ext_photo:Loader
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            ext_photo = new Loader()
            ext_photo.load(new URLRequest("http://upload.wikimedia.org/wikipedia/commons/a/aa/Kronung_Heinrich_II.jpg"))
            ext_photo.contentLoaderInfo.addEventListener(Event.COMPLETE, extLoaded)
            ext_photo.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, toErr)
            ext_photo.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, toErr)
        }
        
        private function toErr(e:*):void {
            setText(e.toString())
        }
        
        private var loader:Loader
        private function extLoaded(e:Event):void { // Данные мы получили, теперь грузим их заново сами в себя!
            loader = new Loader()
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, introReady)
            loader.loadBytes(ext_photo.contentLoaderInfo.bytes);
            addChild(loader)
        }

        private function introReady (e:Event):void {
            var sourceData:DisplayObject = DisplayObject((e.target as LoaderInfo).content)
            // Собственно можно считывать параметры sourceData
            setText(sourceData.width+" "+sourceData.height)
        }
        
        private var tf:TextField
        private function setText(str:String):void {
            if (!tf) {
                tf = new TextField()
                tf.autoSize = TextFieldAutoSize.LEFT
                tf.wordWrap = true
                addChild(tf)
            }
            
            tf.appendText("\r\r"+str)
        }
        
    }
    
}
Antoxer_92
chingachgoog, спасибо за скрипт, опробую чуть позже, пока другими делами буду заниматься в приложении!!!
MustLive
Цитата
Проблема с определением размера фото

Antoxer_92

Для решения этой проблемы воспользуйся кодом chingachgoog (из его последнего поста). С этим кодом ты должен решить задачу определения размеров фотографий.
Antoxer_92
chingachgoog, Скрипт вот только что проверил, поскольку меня не так сильно волновала эта проблема, но вот как только я подошел к ней, решил проверить!!! Скрипт действительно работает!!! Так что спасибо тебе еще раз smile.gif
Русская версия IP.Board © 2001-2013 IPS, Inc.