35 votes

Traitement des images côté client

Nous allons construire une application web qui nécessite un traitement de l'image. Nous aimerions que cette charge de traitement pour être sur le client, autant que possible, et nous aimerions soutenir autant de plates-formes (même les mobiles) autant que possible.

Ouais, je sais, un vœu pieux

Voici l'info:

  1. Le traitement de l'Image est la pixellisation de certaines données. Pense que, comme la création d'une image PNG à partir d'un fichier PDF.

  2. Nous n'avons pas beaucoup de puissance du serveur. Si le traitement côté client, c'est un peu un must.

Ainsi, nous envisageons:

  1. Flash - la plus répandue, mais de ce que j'ai lu a l'atonie des outils de développement. (et pas de l'iPhone/iPad pour l'instant).

  2. Silverlight - nous autorise à utiliser .NET CLR, donc un gros ++ (beaucoup de code .NET). Mais n'est pas pris en charge pour la plupart des mobiles ( selon la rumeur, le soutien android dans le futur)

  3. HTML5 + Javascript - probablement le plus "portable" option. Le problème est d'avoir à réécrire tout ce que le traitement de l'image de code en Javascript.

Des pensées ou des architectures qui pourrait l'aider? Précisions: je n'ai pas besoin de plus d'idées sur ce que les bibliothèques sont disponibles pour Silverlight et Javascript. Mon dilemme est

  • le choix de Silverlight signifie pas de support pour la plupart des téléphones mobiles
  • le choix de Flash signifie que nous devons réaménager la plupart de nos code ET pas de iPhone/iPad
  • HTML5 + Javascript, nous avons à réaménager la plupart de nos code et pas encore prise en charge dans tous les navigateurs
  • le choix de deux (Silverlight + Flash) seront trop coûteux

Out-of-the-box ou claire idées / solutions de rechange que je pourrais être absent?

29voto

Craig Schwarze Points 3759

C'est le genre de question que les architectes de logiciels, aller à l'encontre de tous les temps. Par habitude, il n'y a pas de solution idéale. Vous devez sélectionner les compromis qui est le plus acceptable pour votre entreprise.

Pour résumer votre problème, la plupart de votre logiciel de traitement d'image qui est écrit dans .NET. Vous souhaitez l'exécuter côté client sur les appareils mobiles, mais il est limité .NET de pénétration sur les mobiles. Les solutions de rechange avec plus de pénétration (eg. Flash), il faudrait vous ré-écrire votre code, vous ne pouvez pas se permettre de le faire. En outre, ces solutions de rechange ne sont pas pris en charge sur l'iPhone/iPad.

Ce qu'idéalement, vous voulez, c'est un moyen d'exécuter tous vos .NET code sur la plupart des plates-formes existantes, y compris l'iPhone/iPad. Je peux dire avec une certaine certitude qu'une telle solution existe actuellement - il n'y a pas de "silver bullet" la réponse que vous avez négligé.

Donc, ce que vous avez besoin de faire des compromis sur? Il me semble que même si vous réaménager en flash, vous êtes toujours sur le point de manquer un grand marché (iPhone). Et le réaménagement du logiciel est extrêmement coûteux, de toute façon.

Ici est la meilleure solution à votre problème: vous avez besoin de faire des compromis sur votre "côté client" l'exécution de la contrainte. Si vous exécuter côté serveur, vous arrivez à garder votre code existant, et aussi se déployer à juste au sujet de chaque client mobile, y compris l'iPhone.

Vous avez dit que votre serveur de puissance limitée, mais le serveur de la puissance de traitement est bon marché par rapport aux coûts de développement des logiciels. En effet, il n'est pas cher d'externaliser votre composant de serveur et ne payez que pour ce que vous utilisez. Il est plus que probable que votre demande n'ont qu'un faible taux de pénétration de commencer avec. À mesure que l'entreprise grandit, vous serez en mesure de se permettre de mettre à niveau la capacité de vos serveurs.

Je crois que c'est la meilleure solution à votre problème.

7voto

user73993 Points 414

Vous hébergez le traitement des images sur Amazon E2C, Azure ou Google. IIRC E2C présente de nombreux problèmes de traitement d’image courants, prêts à l'emploi.

Azure probablement plus familier en termes de partage de code en tant que service Web

Vous ne payez que pour les cycles de processeur et les transferts / stockage, etc.

4voto

George Profenza Points 24345

Je suis sûr qu'il y aura Silverlight et JS les gens de poster des exemples. Ici sont quelques-uns des éditeurs d'image, écrit en actionscript:

  1. Phoenix
  2. PhotoshopExpress

Il y a une reconstitution de l'image de la bibliothèque pour commencer. Plus PixelBender est disponible dans Flash Player 10, il est rapide, il s'exécute dans un thread séparé et les gens ne le joli fou de choses avec elle.

HTH

4voto

Rene Schulte Points 2084

Un peu d'aide pour le Silverlight partie:

Il y a un Silverlight éditeur d'image appelé Thumba. Et Nokola récemment fait l'un appelé EasyPainter et il permettra également de fournir le code source de la furure.

Pour la conversion d'image, je recommanderais de la bibliothèque open source ImageTools qui comprend également certains des effets de base. Silverlight a une classe pour la manipulation de pixels d'images appelé WriteableBitmap. La bibliothèque open source WriteableBitmapEx est une collection de méthodes d'extension pour Silverlight est WriteableBitmap. La WriteableBitmap API est très minimaliste, et il n'est que le raw Pixels de la matrice de pour de telles opérations. Le WriteableBitmapEx essaie de compenser avec des extensions des méthodes qui sont faciles à utiliser comme intégré dans les méthodes. Pixel Shaders peuvent également être utilisés pour faire quelque rapide et des effets avancés. Même si elles sont limitées par le Shader Model 2 shaders peuvent être utilisés pour rapide bluring, la teinture et de telles choses.

3voto

back2dos Points 13253

AVERTISSEMENT: je me considère comme un défenseur de la plate-forme Flash. J'admire Silverlights énorme potentiel de la technologie à déployer près de tout .Contenu NET via le navigateur, mais il a un faible taux de pénétration, c'est horriblement commercialisés et bien que perçue comme telle par beaucoup de personnes (surtout des gens qui ne savent pas de Flash ou Silverlight)- n'est pas un concurrent de Flash, autant que Flash n'est pas concurrent de Sliverlight. L'idéaliste en moi aime l'idée de tout faire en HTML+JS à l'aide d'un standard, au lieu de s'appuyer sur 3ème partie logiciel propriétaire. Mais la vérité est, le JS est lente et l'API est limitée, et la mise en œuvre de JS, HTML et CSS sont terriblement incompatible à travers les navigateurs.

Si tu veux vraiment le bâton pour .NET et sont donc intéressés dans le ciblage de l'iPhone et de ses frères et sœurs, alors vous pourriez voulez vérifier MonoTouch.

Encore, même si cela peut vous surprendre, je vais vous dire d'utiliser le Flash. :)

Pourquoi? Le traitement de l'image bit est la plus petite partie de votre application. Tout ce que vous écrivez, je suis très sûr de ce que. Je ne sais pas à propos de Silverlight, mais en Flash les filtres utilisés par "Thumba" et "EasyPainter" peuvent être créés dans une journée, la plupart d'entre eux tout simplement à l'aide de ConvolutionFilter, ColorMatrixFilter, DisplacementMapFilter et BitmapData::paletteMap ou même simplement par l'application de l'un des autres filtres Flash offre la sortie de la boîte. Toutes les choses supplémentaires peuvent être créés à l'aide de PixelBender, qui a été souligné par George. Le noyau de la langue est un sous-ensemble de C, de sorte que le portage classique filtres ne devrait pas être trop de temps. Aussi l'alchimie (un LLVM backend ciblage Flash Player 10) serait une option utile de l'examiner, mais il n'est pas très stable mais.

La plus grande partie de votre application sera beaucoup de GUI conception, l'interface graphique, mise en œuvre, Logiques d'Entreprise etc. Flash est vraiment génial quand il s'agit de simple, mais assez rapide de manipulation de l'image et avec le framework Flex et MXML, vous disposez d'un outil puissant de façon productive créer l'interface graphique de votre application, qui peut interagir avec une multitude de solutions de serveur pour pratiquement n'importe quelle plate-forme.

Aussi, Flash dispose d'une grande et d'une communauté active, offrant des tonnes de tutoriels, d'extraits de code, des bibliothèques et des structures, et d'un grand écosystème, avec la cross-compilation d'outils pour livrer le contenu flash pour les autres plates-formes (y compris le prochain Flash CS5, ou de le mentionné Elips). Je ne comprends pas, où tu as l'impression, que la plate-forme Flash manque de développement des outils. À la différence de l' .NET suite, c'est qu'ils sont fournis par une multitude de fournisseurs. Le prochain Flash Player 10.1 a déjà été souligné par George, mais jamais le moins, je voulais souligner, que cela fait de nombreuses de la croix-plattform considérations obsolètes.

Dernier mais non le moindre, je tiens à souligner haXe. Il permet de compiler pour SWF, mais aussi pour C++, en utilisant la même API fournie par le NME, à la cible de l'iPhone. Il y a aussi un travail en cours sur un android backend. Si vous êtes n'êtes pas jouer à lancer dans les prochaines 4-5 mois, alors c'est certainement une option.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X