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

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

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

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

  1. Обработка изображений является растеризацией от некоторых данных. Думайте как создание изображения PNG из файла PDF.

  2. Мы не имеем много власти сервера. Таким образом, клиентская обработка, что-то вроде должно.

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

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

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

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

Какие-либо мысли или архитектура, которая могла бы помочь? Разъяснение: Мне не нужны дальнейшие идеи о том, какие библиотеки доступны для Silverlight и JavaScript. Моя дилемма

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

Какой-либо out-of-the-box или прекрасные идеи / альтернативы я мог бы отсутствовать?

32
задан Gabriel Ambrósio Archanjo 5 June 2014 в 00:47
поделиться

14 ответов

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

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

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

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

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

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

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

28
ответ дан 27 November 2019 в 20:44
поделиться

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

Существует редактор изображений Silverlight Change . А Nokola недавно сделала один под названием EasyBizer , и он также предоставит исходный код в FOURURE.

Для преобразования изображения я рекомендую библиотеку открытой исходности Imagetools , которые также включают в себя некоторые основные эффекты. Silverlight имеет класс для манипулирования циклами растровых изображений, называемых WritableBitmap. Библиотека с открытым исходным кодом WRITEABINGBITMAPEX представляет собой сборник расширенных методов для записи Silverlight. API PRITEMINGBITMAP очень минималистично, и для таких операций есть только сырые пиксели. Библиотека WRITEABINGBITMAPEX пытается компенсировать, что с методами расширений, которые легко использовать, такие как встроенные методы. Пиксельные шейдеры также могут быть использованы для проведения быстрого и расширенного эффекта. Хотя они ограничены шейдерами модель 2 шейдеров, могут быть использованы для быстрой смесителя, тонирования и такими вещами.

4
ответ дан 27 November 2019 в 20:44
поделиться

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

  1. Phoenix
  2. PhotoshopExpress

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

HTH

4
ответ дан 27 November 2019 в 20:44
поделиться

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

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

-1
ответ дан 27 November 2019 в 20:44
поделиться

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

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

1
ответ дан 27 November 2019 в 20:44
поделиться

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

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

Вы платите просто за циклы ЦП, передачу / хранение и т. Д.

7
ответ дан 27 November 2019 в 20:44
поделиться

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

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

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

2
ответ дан 27 November 2019 в 20:44
поделиться

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

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

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

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

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

0
ответ дан 27 November 2019 в 20:44
поделиться

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

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

0
ответ дан 27 November 2019 в 20:44
поделиться

Проверяли ли вы редактор от Pixlr.com ?
Посмотрите также на их API...

1
ответ дан 27 November 2019 в 20:44
поделиться

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

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

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

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

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

3
ответ дан 27 November 2019 в 20:44
поделиться

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

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

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

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

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

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

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

3
ответ дан 27 November 2019 в 20:44
поделиться

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

2
ответ дан 27 November 2019 в 20:44
поделиться

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

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

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

0
ответ дан 27 November 2019 в 20:44
поделиться