Le redimensionnement d’image le plus rapide dans .NET

J’ai besoin de la bibliothèque la plus rapide pour redimensionner des images en taille réelle (certaines pouvant aller jusqu’à 9 Mo) en plusieurs tailles .

Voici le scenerio:

  • L’utilisateur télécharge une photo
  • un FileSystemWatcher s’exécute dans un service surveillant l’emplacement de repository (sur un réseau SAN)
  • Lorsqu’une nouvelle photo apparaît, le service crée 4 versions de l’image en qualité JPEG intégrale:
    • 100px de large
    • 320px de large
    • 640px de large
    • 1280 de large

Je ne suis pas gêné si la bibliothèque est en C / C ++ ou quoi que ce soit d’autre, aussi longtemps que je peux y accéder via .NET c’est cool

En outre, cela devra s’adapter à éventuellement 1 000 utilisateurs actifs .

Laisse moi savoir ce que tu penses 🙂

Il y a beaucoup d’articles qui montrent les bases de ceci . J’ai utilisé les composants d’ Atalasoft et les ai trouvés de bonne qualité. Le redimensionnement et l’utilisation d’images JPEG présentent des nuances.

Vous semblez être très concerné par les performances, mais vous ne fournissez pas suffisamment d’informations pour nous aider à vous suggérer de bonnes optimisations. Quoi que vous fassiez, vous devez effectuer une parsing complète des performances et comprendre ce qui est lent. Dans certains cas, le code de traitement d’image maintenable mais maintenable peut être correct si d’autres éléments sont optimisés.

Une solution pour de bonnes performances consiste à mettre en queue les fichiers entrants devant être convertis. Ajoutez plus de machines pour gérer plus de messages dans la queue ou optimisez le code de service pour obtenir un meilleur débit. Ce n’est vraiment pas si difficile de gérer un grand nombre d’utilisateurs si la conception est correcte.

Voici comment Winforms

public Image ResizeImage( Image img, int width, int height ) { Bitmap b = new Bitmap( width, height ) ; using(Graphics g = Graphics.FromImage( (Image ) b )) { g.DrawImage( img, 0, 0, width, height ) ; } return (Image ) b ; } 

et voici WPF manière TransformedBitmap Class

Je recommande ImageResizer :

Les principales caractéristiques sont les suivantes:

  • API d’image basée sur une URL RESTful (exemple: src = “img.jpg? W = 170”)
  • Rogner, redimensionner, faire pivoter, retourner, contraindre et encoder de manière intuitive
  • Rendu de PDF en images
  • 19 plugins gratuits couvrent les tâches les plus courantes
  • Mise en cache entrée / sortie disque + mémoire
  • PNG / GIF 8 bits et traitement GIF animé
  • Support flexible de superposition de texte et d’image
  • Suite de filtrage d’images (licence requirejse)
  • Haute performance
  • et plus ….

Pour installer avec Nuget:

 PM> Install-Package ImageResizer.MvcWebConfig PM> Install-Package ImageResizer.Plugins.DiskCache PM> Install-Package ImageResizer.Plugins.PrettyGifs 

Pour plus d’informations, veuillez consulter: http://imageresizing.net/docs/install/nuget

Si money n’est pas un object, LeadTools est la bibliothèque traditionnelle “aller à” pour le traitement des images. Cela étant dit, ma première tendance serait de le coder à l’aide d’appels .NET GDI + puis de faire des tests. Il est probable que cette solution sera suffisamment performante, mais dans le cas contraire, vous disposerez d’une base de référence à partir de laquelle vous pourrez comparer d’autres bibliothèques et solutions. Tout élément impliquant la génération d’un outil de ligne de commande impliquera la création d’un processus distinct pour chaque image, ce qui pourrait annuler les avantages liés à l’utilisation d’un code non géré.

Je ne suis pas sûr des performances, mais l’ open source OpenCV est une option.

void cvResize (const CvArr * I, CvArr * J, int interpolation = CV_INTER_LINEAR);

La fonction cvResize redimensionne l’image I afin qu’elle s’adapte exactement à J. Si le retour sur investissement est défini, la fonction considère le retour sur investissement comme pris en charge, comme d’habitude. l’image source utilisant l’élément structurant spécifié B qui détermine la forme d’un voisinage de pixel sur lequel le minimum est pris: