Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Можно ли узнать размеры загружаемого JPG до его полной загрузки? (http://www.flasher.ru/forum/showthread.php?t=147561)

джонатан 07.12.2010 20:46

Можно ли узнать размеры загружаемого JPG до его полной загрузки?
 
Дорбрый день. Такой вопрос. Размеры всмысле не вес, а width/height. В АС2 это было невозможно, а вот в АС3 пологаю должен быть способ.

Благодарю за внимание.

TWETTI 07.12.2010 21:00

До загрузки картинки по-моему можно узнать размер. Надо смотреть в сторону ByteArray и спецификации JPG формата.

nOobCrafter 07.12.2010 21:01

есть готовый велосипед, погуглите. Если что позже выложу, флешку не подключал еще.

Psycho Tiger 07.12.2010 21:03

При загрузке Loader`ом объект загружается как SWF файл. Это можно сказать если смотреть на bytes от загружаемого изображения. Инфу о его размерах можно получить из Header`а этой SWF`ки. В одной из своих статей здесь я рассматривал как парсит этот самый хеадер.

джонатан 08.12.2010 00:24

Psycho Tiger, в блоге искать?

Psycho Tiger 08.12.2010 00:25

http://flasher.ru/forum/blog.php?b=237

джонатан 08.12.2010 03:44

большое спасибо, очень хорошая статья!

dimarik 08.12.2010 13:53

Что-то подсказывает мне, что пока картинка полностью не загрузится, у Loader'а фиг мы чего узнаем.
Тогда берем в зубы URLStream и пошли парсить JPEG заголовок по поступлению достаточной информации.
Есть и готовые велосипеды. Можно кататься.

Psycho Tiger 08.12.2010 15:31

dimarik, Блуд мне в комментах к той статье как раз говорил обратное - тащим у Loader`а во время загрузки.

dimarik 08.12.2010 15:46

У Loader узнаем dimensions изображения?

nOobCrafter 08.12.2010 15:56

Вложений: 1
вот о чем говорил, можно загуглить и найти пост где идет пояснение.

dimarik 08.12.2010 17:33

Цитата:

Сообщение от Psycho Tiger (Сообщение 955803)
dimarik, Блуд мне в комментах к той статье как раз говорил обратное - тащим у Loader`а во время загрузки.

Специально проверил. Во время progress невозможно получить загруженные bytes. Может я не так ччто-то делаю?

Код AS3:

///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (C) 2010. Dimarik
//
///////////////////////////////////////////////////////////////////////////////
 
package
{
 
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
 
/**
 *  @author                                Dimarik
 *  @version                        1.0
 *  @langversion                3.0
 *  @playerversion                9.0
 *
 */

[SWF(width="1024", height="768", frameRate="21", backgroundColor="#E0EEEE")]
 
public class LoaderTest extends Sprite {
 
        //-------------------------------------------------------------------------
        //
        //  Constructor
        //
        //-------------------------------------------------------------------------
 
        public function LoaderTest() {
                super();
                super.addEventListener(Event.ADDED_TO_STAGE, this.initialize);
        }
 
        //-------------------------------------------------------------------------
        //
        //  Private variables
        //
        //-------------------------------------------------------------------------
 
        //-------------------------------------------------------------------------
        //
        //  Private methods
        //
        //-------------------------------------------------------------------------
 
        public function initialize(event:Event):void {
                (event.target as IEventDispatcher).removeEventListener(event.type, arguments.callee);
 
                super.stage.scaleMode = StageScaleMode.NO_SCALE;
                super.stage.align = StageAlign.TOP_LEFT;
 
                var url:                String = 'http://www.pixeljoint.com/files/icons/full/tree2__r1368268481.gif';
                var request:        URLRequest = new URLRequest(url);
                var loader:                Loader = new Loader();
                loader.load(request);
 
                var li:                        LoaderInfo = loader.contentLoaderInfo;
                li.addEventListener(Event.COMPLETE,                        this.handler_complete);
                li.addEventListener(ProgressEvent.PROGRESS,        this.handler_progress);
        }
 
        //-------------------------------------------------------------------------
        //
        //  Events handlers
        //
        //-------------------------------------------------------------------------
 
        /**
        * @private
        */

        private function handler_complete(event:Event):void {
                var li:LoaderInfo = event.target as LoaderInfo;
                trace('handler_complete, length', li.bytes.length); // 584458
                super.addChild(li.loader.content);
        }
 
        /**
        * @private
        */

        private function handler_progress(event:ProgressEvent):void {
                var li:LoaderInfo = event.target as LoaderInfo;
                trace('handler_progress, length', li.bytes.length); // 0
        }
 
}
}


Psycho Tiger 08.12.2010 17:50

Из переписки меня и Блуда:
Цитата:

Блин.
Смотри: loaderInfo я могу выдернуть у content`а, который станет доступен только по окончанию загрузки, а я хочу начать парсинг после первых 50 загруженных байт (ну приблуда у меня такая, хочется показать совсем неопытному читателю, что нам совсем не нужно даже флешку загружать - хоть обрубай поток после этого). Читать данные пока загрузка не окончена позволяет только URLStream (ну, сокет не в счет), поэтому выбор и пал на него.
Цитата:

Psycho Tiger, приехали:
1. а как у Loader ты отслеживаешь прогресс загрузки?
2. и как использование Loader помешает тебе отрубать поток?
3. что кроме религии тебе мешает начать парсинг после первых 50 загруженных байт используя Loader?
4. неопытный читатель не поймёт почему ты используешь URLStream для загрузки swf.
5. кроме URLStream и сокета читать данные позволяет Loader.
Теперь нужно подумать.

Добавлено через 2 минуты
P.S. ты нарушаешь конвенцию? Забавно )
Код AS3:

private function handler_complete(event:Event):void {


dimarik 08.12.2010 18:55

Не нарушаем, а немного отходим от нее. Зато и глазу, и в поиске приятно. Сразу видны обработчики.

Psycho Tiger 08.12.2010 19:41

Аха, в этом есть смысл.
Ждём Блуда или кто-то готов дать комментарии?)

iNils 08.12.2010 19:51

Цитата:

Сообщение от dimarik (Сообщение 955863)
Не нарушаем, а немного отходим от нее. Зато и глазу, и в поиске приятно. Сразу видны обработчики.

Поэтому я оставил все как в as2, типа onСomplete, onProgress

dimarik 08.12.2010 21:44

iNils, on[event.type] вполне соответствует конвекции. Ха-ха. Только привыкли мы к "handler_". Очень он нам мил.

Wolsh 08.12.2010 22:14

Цитата:

Сразу видны обработчики
Хех... А два ярко-синих слова event:Event никак не говорят глазу, что здесь обработчик?)))) Не знаю, моему глазу гОры приятнее, чем я_мы.

iNils 08.12.2010 22:21

Цитата:

Сообщение от Wolsh (Сообщение 955904)
Хех... А два ярко-синих слова event:Event никак не говорят глазу, что здесь обработчик?)))) Не знаю, моему глазу гОры приятнее, чем я_мы.

Да вообще то там есть это)
Код AS3:

//-------------------------------------------------------------------------
//
//  Events handlers
//
//-------------------------------------------------------------------------


dimarik 08.12.2010 22:52

Цитата:

Сообщение от Wolsh (Сообщение 955904)
Хех... А два ярко-синих слова event:Event никак не говорят глазу, что здесь обработчик?)))) Не знаю, моему глазу гОры приятнее, чем я_мы.

Ctrl+o во FlexBuilder. Набираем "han", "hand" или "handle", в зависимости от скоропечатания, и видим список обработчиков. Это что касается поиска. А если Ваш взгляд нечаянно выхватит "я_мы" в таком виде, то значит, что вы просто опустились в конец листинга, где и располагаются обработчики событий.

Добавлено через 21 минуту
Кстати, пользуясь случаем хочу передать привет Андрею aka "andreus".
Мне сейчас перепала поддержка проекта, автором которого он являлся. Замечательный флешер из нашей команды, ныне покинувший timezero. Благодаря etc и BloodHound, ратовавших за введение корпоративных единых правил оформления проектов, я трачу на первую компиляцию и на понимание кода этого проекта очень мало времени. А время в наши дни - это деньги.


Часовой пояс GMT +4, время: 14:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.