Клиентская обработка изображения

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

Да, я знаю, принятие желаемого за действительное

вот информация:

  1. обработка изображений-это растеризация из некоторых данных. Подумайте, как создать PNG-изображение из PDF файл.

  2. У нас нет большой мощности сервера. Таким образом, обработка на стороне клиента немного обязательна.

Итак, мы рассматриваем:

  1. Flash - самый распространенный, но из того, что я читал, есть тусклые инструменты разработки. (и пока нет поддержки iPhone/iPad).

  2. Silverlight-позволяет использовать .NET CLR, поэтому большой ++ (много кода в .NET). Но не поддерживается для большинства мобильных телефонов ( по слухам поддержка Android в будущем)

  3. HTML5 + Javascript-вероятно, самый "портативный" вариант. Проблема в том, чтобы переписать весь этот код обработки изображений в Javascript.

любые мысли или архитектуры, которые могут помочь? Уточнение: мне не нужны дальнейшие идеи о том, какие библиотеки доступны для Silverlight и Javascript. Моя дилемма

  • выбор Silverlight означает отсутствие поддержки для большинства черней
  • выбор Flash означает, что мы должны пересмотреть большую часть нашего кода и без поддержки iPhone/iPad
  • HTML5 + Javascript мы должны переработать большую часть нашего кода и еще не полностью поддерживается во всех браузерах
  • выбор двух (Silverlight + Flash) будет слишком дорогим

любые из коробки или яркие идеи / альтернативы, которые я мог бы пропустить?

14 ответов


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

чтобы суммировать вашу проблему, большая часть вашего программного обеспечения для обработки изображений записывается .Сеть. Вы хотели бы запустить его на стороне клиента на мобильных устройствах, но есть ограниченное проникновение .NET на мобильных телефонах. Альтернативы с более высоким проникновением (например. Flash) потребует от вас переписать код, который ты не можешь себе позволить. Кроме того, эти альтернативы не поддерживаются на iPhone/iPad.

в идеале вы хотите запустить весь свой .NET-код на большинстве существующих платформ, включая iPhone/iPad. Я могу с некоторой уверенностью сказать, что такого решения в настоящее время не существует - нет ответа "серебряной пули", который вы упустили.

Итак, что вам нужно для компромисса? Мне кажется, что даже если вы перестроитесь в flash, вы все равно будете пропустите На главном рынке (iPhone). А перестройка программного обеспечения все равно обходится очень дорого.

вот лучшее решение вашей проблемы - вам нужно скомпрометировать ограничение "выполнение на стороне клиента". Если вы выполняете серверную часть, вы можете сохранить существующий код, а также развернуть его почти на каждом мобильном клиенте, включая iPhone.

Вы сказали, что мощность вашего сервера ограничена, но вычислительная мощность сервера дешева по сравнению с разработкой программного обеспечения затраты. Действительно, это не так дорого, чтобы аутсорсинг серверного компонента и просто платить за то, что вы используете. Скорее всего, ваше приложение будет иметь только низкое проникновение для начала. По мере роста бизнеса вы сможете позволить себе обновить емкость сервера.

Я считаю, что это лучшее решение вашей проблемы.


хост обработки изображений на Amazon E2C, Azure или Google. IIRC E2C имеет много общих проблем обработки изображений, упакованных и готовых к работе.

Azure, вероятно, более знакомая земля с точки зрения совместного использования кода в качестве веб-службы

вы платите только за ЦП и передачи/хранения и т. д.


Я уверен, что будут люди Silverlight и JS, публикующие примеры. Вот некоторые редакторы изображений, написанные на actionscript:

  1. Феникс
  2. PhotoshopExpress

есть библиотека ImageProcessing для начала. Плюс PixelBender доступно в Flash Player 10, это быстро, он работает в отдельном потоке и человек сделать некоторые довольно сумасшедшие вещи с он.

HTH


некоторая помощь для части Silverlight:

существует редактор изображений Silverlight под названием Thumba. И Нокола недавно сделал один под названием EasyPainter и он также предоставит исходный код в furure.

для преобразования изображений я бы рекомендовал библиотеку с открытым исходным кодом ImageTools это также включает в себя некоторые основные эффекты. Silverlight имеет класс для обработки пикселей растровых изображений, называемый WriteableBitmap. Открытый исходный код библиотека WriteableBitmapEx представляет собой набор методов расширения для Writeablebitmap Silverlight. API WriteableBitmap очень минималистичен, и для таких операций существует только массив необработанных пикселей. Библиотека WriteableBitmapEx пытается компенсировать это с помощью методов расширений, которые просты в использовании, как встроенные методы. Пиксельные шейдеры также можно использовать для создания быстрых и продвинутых эффектов. Хотя они ограничены шейдерами модели 2, шейдеры могут использоваться для быстрого размытия, тонировка и все такое.


ваша проблема является идеальной мишенью для вызов язык программирования. haXe написан для интернета и может компилироваться на JavaScript, Flash и Objective-C (возможно, Java/.NET скоро). Таким образом, вы не выбираете, какую платформу вы собираетесь инвестировать, но на каком языке. haXe легко адаптируется для программиста AcitonScript.

нет смысла запускать алгоритмы обработки изображений в песочнице JavaScript, когда доступна Flash, потому что это будет намного быстрее. Также нет смысла запускать тяжелые алгоритмы обработки изображений на мобильном устройстве, таком как iPhone с JavaScript. Я бы поддержал JavaScript только как худшее резервное решение.

Если вам не нравится использовать haXe, я бы пошел со вспышкой. Вы можете развернуть приложение Flash для iPhone, если это ваша проблема. Это также очень здорово, потому что вы получаете родной код ARM. Есть отличные инструменты для профессионального развития Флэш. FDT и IntelliJ IDEA два из них. Лучшая Haxe IDE, вероятно,FlashDevelop выступает на момент написания.

поэтому я бы определенно не использовал JavaScript в качестве единственного решения. haXe идеально подходит для того, что вы пытаетесь достичь. Если вы не доверяете или не хотите инвестировать в haXe, вы можете использовать Flash из-за экспорт iPhone/iPad.

в зависимости от вашего usecase я бы также рекомендовал вам посмотреть на облачный хостинг, как Amazon EC2 и Например, Google AppEngine. Хостинг стоит дешево, и масштабирование будет легко для вашей задачи. Опыт будет намного лучше, когда дело доходит до сложных операций, которые могут занять даже много времени на настольной системе.


отказ от ответственности:я считаю себя сторонником платформы Flash. Я восхищаюсь огромным потенциалом Silverlights как технологией для развертывания почти любого контента .NET через браузер, но он имеет низкое проникновение, ужасно продается и-хотя воспринимается как таковой многими (в основном людьми, которые не знают ни Flash, ни Silverlight)- не является конкурентом Flash, так же как Flash не является конкурентом Sliverlight. Идеалист во мне любит идею делать все в HTML+JS, используя стандарт, вместо того, чтобы полагаться на стороннее проприетарное программное обеспечение. Но правда в том, что JS медленный, а API ограничен, а реализации JS, HTML и CSS ужасно непоследовательны в браузерах.

Если вы действительно хотите придерживаться .NET и так заинтересованы в таргетинге на iPhone и его братьев и сестер, то вы можете проверить есть некоторые подробности.

тем не менее, даже если это может вас удивить, я скажу вам использовать Flash. :)

Почему? Изображение обработка bit является наименьшей частью вашего приложения. Что бы вы ни писали, я в этом уверен. Я не знаю о Silverlight, но во Flash фильтры, используемые "Thumba" и "EasyPainter", могут быть созданы в течение дня, большинство из них просто используют ConvolutionFilter, ColorMatrixFilter, DisplacementMapFilter и BitmapData:: paletteMap или даже просто применяя один из другие предложения вспышки фильтров из box. Любые дополнительные вещи могут быть созданы с помощью PixelBender, на что указал Джордж. Язык ядра является подмножеством C, поэтому перенос классических фильтров не должен занимать слишком много времени. Также алхимия (LLVM backend targeting Flash Player 10) будет вариантом, который стоит исследовать, хотя он еще не очень стабилен.

большая часть вашего приложения будет много графического дизайна, внедрение графического интерфейса, бизнес-логики и т. д. Flash действительно здорово, когда он приходит к простой, но достаточно быстрой манипуляции с изображениями, и с помощью Flex framework и MXML у вас есть мощный инструмент для продуктивного создания GUI вашего приложения, который может очень хорошо взаимодействовать с множеством серверных решений практически для любой платформы.

кроме того, Flash имеет большое и активное сообщество, предлагающее множество учебных пособий, фрагментов кода, библиотек и фреймворков, а также большую экосистему с инструментами кросс-компиляции для доставки flash-контента на другие платформы (включая грядущее вспышки для CS5, или упомянутые Elips). Я не понимаю, откуда у вас сложилось впечатление, что Flash-платформе не хватает инструментов разработки. Разница в .NET suite заключается в том, что они предоставляются множеством поставщиков. Предстоящий флэш плеер 10.1 уже отмечал Джордж, но, тем не менее, я хотел подчеркнуть, что это заставляет многих кросс-платформа соображения устарело.

последнее, но не менее важное, я хотел бы отметить вызов. Он позволяет компилировать в SWF, но и в C++, используя тот же API, что и NME, to цель iPhone. Также идет работа над бэкэндом android. Если вы не играете, чтобы запустить в течение ближайших 4-5 месяцев, то это определенно вариант.


в дополнение к другим ответам другим вариантом может быть гибридное решение. Например, используйте Flash / Silverlight для большинства вашей целевой аудитории и используйте серверную обработку для тех, кто ее не поддерживает (или вы можете создать собственное приложение для iP[hone|ad])

возможно, вам придется сделать что-то подобное в любом случае, поскольку мобильные телефоны, на которые вы ориентируетесь, могут иметь недостаточную вычислительную мощность в зависимости от сложности обработки изображений.

конечно, вы все еще есть возможность обновления вашего сервера, который, хотя вы в настоящее время со скидкой, вероятно,дешевле чем тратить время разработки на создание/развертывание / тестирование клиентского решения.


вы можете использовать Silverlight для всех клиентов с поддержкой Silverlight и для клиентов, отличных от Silverlight, на стороне сервера обработки изображений. Поскольку код Silverlight является C#, вы можете дважды скомпилировать его, чтобы сделать (в основном)тот же код, что и Silverlight и non-Silverlight (т. е. сервер). Это дает вам лучшее из обоих миров.


вы не говорите, на каком языке" весь этот код " вам придется переписывать. Может ли полуавтоматический перевод на Javascript быть практичным?

возможно, вы могли бы начать на стороне сервера, как предлагает CraigS, а затем перемещать функции в клиент с течением времени, а не переписывать все сразу.


вы проверили редактор из Pixlr.com ?
Взгляните на их API Как хорошо..


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

Это лучший компромисс.


зависит от типа обработки изображений и конечного пользователя, на который вы нацелены.

Как вы ищете для целевых мобильных телефонов обработки изображений необходимо будет принять во внимание тип телефона пользователя или receipient имеет (если обмен сообщениями через SMS/MMS), как различные телефоны имеют различные экраны разрешения и обрабатывать различные форматы изображений для основных изображений и эскизов.

Я бы предложил вам рассмотреть гибридную облачную архитектуру как был упомянут в Microsoft PDC keynotes в этом году. Это позволит вам иметь свой собственный сервер(ы) для поддержки вашего приложения, но если вам требуется дополнительная емкость из-за масштабирования в облако с помощью AppFabric.

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

Я работал над решением, которое размещал свою серверную часть инфраструктуры обработки и доставки изображений, а затем создавал различные предложения пользовательского интерфейса, позволяющие продавать через настольные компьютеры, MNOs и AppStores. Он может работать и с точки зрения бизнеса может предложить экономию от масштаба.


Почему бы не упомянуть Java-апплет ?

хорошие стороны:

почти вся поддержка браузера ? нужно установить JRE ? поддержка всех ОС Java предоставляет Java Advanced Image kits, но если c++ dll можно вызвать, это лучше всего (JNI может вызвать c++ dll )


Как я вижу, нет ни одного решения, которое отвечает всем вашим потребностям. Ваш лучший вариант, imo, - пойти с Flash и надеяться, что Adobe заключит соглашение с Apple, чтобы получить Flash на iPhone/iPad. Основным недостатком, конечно, придется переписывать много кода.

Если мобильный сектор не является абсолютно критическим, выберите опцию Silverlight по причинам,которые вы уже упомянули. Вы также можете использовать Silverlight в браузере режим работы в качестве рабочего стола приложение.