Быстрая обработка изображения
Одна часть вопроса уже была рассмотрена в теме "Редактирование изображений перед отправкой ", однако возникла еще одна проблема.
Общая схема редактирования такова: 1. Создание объекта BitmapData из ByteArray. 2. Манипуляция (масштабирование, поворот). 3. Перевод из BitmapData в ByteArray. Вот как-раз по этому пункту и есть главный вопрос. Использую JPEGEncoder, метод encode. Все работает, но скорость оставляет желать много лучшего. Причем, недавно довелось мне увидеть и использовать новую версию загрузчика изображений в социальной сети "ВКонтакте". Там, сразу после загрузки изображения пользователя во флеш, происходит масштабирование - прямо на клиенте - и занимает оно ...... - не более 5 секунд! Причем, пробовал туда подсунуть изображение ~5000*3000, обработка которого посредством моего скрипта занимает на 2*ядерном процессоре примерно полминуты. А тут - 3 сек. Странно. Может это Алхимия? Вобщем, очень хотелось бы услышать ваши мнения, может есть готовые паттерны или компоненты для решения такой задачи. Добавлено через 4 минуты Кстати, относительно разрешения той картинки: оно 5120*3250, что по докам флекса не приемлемо: Код:
The maximum width and maximum height of a BitmapData object is 2880 pixels. |
А кто вам сказал, что процесс конвертации вконтакте происходит на клиентской стороне?
|
Цитата:
Например, для изображения размером в 3,5МБ, он говорит, что объем отправляемых данных - всего 23КБ. Причем, делается это все настолько оперативно, что я тоже сомневаюсь в редактировании на клиенте. Однако так... |
Чего-то с вашим скриптом не так... делал следующее: загрузка последовательности картинок в формате BMP (т.е. не поддерживаем напрямую Loader'ом) микширование, отрисовка в новую картинку и отсылка обратно.
(понятно, что делалось это для того, чтобы отрендерить видео). По моим наблюдениям, даже не сильно оптимизированый код должен успеть сделать то, что вы описали на клиенте за 5 секунд... единственное, я использовал PNGEncoder, JPEGEncoder действительно дольше работает, а размер мне был не принципиален. Так что оптимизируйте... задача вполне выполнимая. |
Цитата:
Цитата:
Цитата:
Код AS3:
|
Да, примерно так:
C# приложение открывает какой-нть AVI, и высылает флешке покадрово через сокет (в реальности через несколько сокетов, для каждого видео отдельно). AVI несжатый ничем фактически от BMP не отличается. флешка принимает / комбинирует картинки по заданному сценарию / рендерит и отсылает обратно уже в PNG. Видео 30 фпс формата 640х480 рендерится таким способом (при условии, что есть всего 1 входящее видео + какая-нибудь незамысловатая графика / немного текста) примерно в соотношении 20 минут рендеринга на 15 секунд видео. т.е. получается 2.4 секунды на 307200 пикселей. |
В моем случае, простое декодирование в jpeg изображение 640*480 на флешке занимает от 0.5 до 1 секунды. Но, с большими разрешениями, разница получается просто геометрического порядка :(
Нашел вот такую ссылку: http://www.switchonthecode.com/tutor...s-jpeg-encoder. Видно, что проблема такая есть - обработка не быстрая, приходится использовать асинхронный вызов. Но все же интересно - как они "ВКонтакте" с такой проблемой и так изящно справились??? |
Чего-то у вас не срастается... либо вы посылаете большую картинку и тогда ее не нужно кодировать, отправляем как есть, либо вы ее уменьшаете и после этого кодируете...
>> что объем отправляемых данных - всего 23КБ >> Кстати, относительно разрешения той картинки: оно 5120*3250, такая картинка будет столько весить если она Ч/Б и изображен на ней "черный квадрат Малевича" :) |
Это реальный пример: приложение обрабатывает (масштабирует) изображение, которое весит 3,5 МБ за 3-5 сек. В результате, его размер: 604px × 383px, вес - 18.3 КБ. Как за такое время можно так пожать картинку на клиенте при помощи флеша???
|
Ну так наверное сначала скейлить все-таки? Чего-то я вообще перестал понимать...
загрузили картинку, создали битмапдату нужного размера, отрисовали туда уменьшеную картинку, перекодировали... это ну никак не может занять больше нескольки секунд... |
Часовой пояс GMT +4, время: 10:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.