8
votes

Image la plus rapide Redimensionnant dans .NET

J'ai besoin de la bibliothèque la plus rapide pour redimensionner des images de taille réelle (une taille maximale de 9 Mo) à plusieurs tailles .

Voici le scénario:

  • L'utilisateur télécharge une photo
  • Un SystemWatcher est en cours d'exécution dans un service surveille l'emplacement Drop (sur un SAN)
  • Lorsqu'une nouvelle photo apparaît, le service créera 4 versions de l'image à la qualité de la version JPEG complète:
    • 100px large
    • 320px large
    • 640px large
    • 1280 largeur

      Je ne suis pas préparé si la bibliothèque est C / C ++ ou autre chose d'autre, tant que je peux appuyer sur elle via .net c'est cool.

      De plus, cela devra mettre à l'échelle pour éventuellement 1 000 Actifs.

      laissez-moi savoir vos pensées :)


2 commentaires

Je n'utiliserais que FichnesSystemwatcher dans des circonstances extrêmement mauvaises. Si vous téléchargez ou copiez le fichier, écrivez dans une file d'attente de message, appelez une méthode de service, quelque chose autre que d'attendre que le FSW le ramasse.


Avez-vous trouvé quelque chose plus rapide que les graphiques? Je suis avec le même problème ici. Stackoverflow.com/Questtions/16988078/...


5 Réponses :


7
votes

Voici WinForms Way

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 ;
}


5 commentaires

L'objet graphique devrait probablement être enveloppé d'utiliser au lieu d'appeler explicitement disposer.


Vous avez raison, j'ai édité le post


Non, c'est juste aussi lent que Picturebox Zoom Sizemode. Je cherche un moyen plus rapide; Mon application de test: Stackoverflow.com/questions/16988078/...


@Turnor pourquoi? En raison de l'effet papillon, ou parce que vous le dites?


@Kennethk. Parce que cela appellera épargner même si une exception est lancée.



2
votes

Si l'argent n'est pas un objet, leadTools est la bibliothèque traditionnelle "Aller à" pour le traitement de l'image. Cela étant dit, ma première inclination serait de le coder en utilisant des appels de stock .NET GDI + puis de tester. Il est probable que cette solution serait suffisamment performante, mais sinon, vous aurez une base de référence à partir de laquelle vous pouvez comparer d'autres bibliothèques et solutions. Tout ce qui implique le frai d'un outil de ligne de commande entraînera la création d'un processus distinct pour chaque image, ce qui pourrait annuler l'avantage d'aller au code non géré.


0 commentaires

6
votes

Il y a beaucoup d'articles là-bas montrant le Principes de base de cette . J'ai utilisé les composants de Atalasoft et les a trouvées de bonne qualité. Il existe des nuances de redimensionner et de travailler avec des images JPEG.

Vous semblez être vraiment préoccupé par la performance, mais vous ne donnez pas vraiment assez d'informations pour nous aider à suggérer de bonnes optimisations pour vous. Quoi que vous fassiez, vous devez faire une analyse complète de la performance et comprendre ce qui fonctionne lentement. Dans certains cas, un code de traitement d'images de maintenance peut être correct si d'autres choses sont optimisées.

Une solution pour de bonnes performances est de faire la queue de fichiers entrants à convertir. Ajoutez plus de machines pour gérer plus de messages dans la file d'attente ou optimiser le code de service pour obtenir un meilleur débit. Il n'est vraiment pas si difficile de gérer un grand nombre d'utilisateurs si vous obtenez le droit de conception.


0 commentaires

0
votes

Je ne suis pas sûr de la performance, mais du Open Source OpenCV est une option. < / p>

void cvResize (const cvarr * i, cvarr * j, int Interpolation = cv_inter_linear);

La fonction CVResize redimensionne l'image I afin qu'elle correspond exactement à J. Si ROI est défini, la fonction considère le retour sur investissement aussi pris en charge que d'habitude. L'image source utilisant l'élément structurant spécifié B qui détermine la forme d'un quartier de pixels sur lequel le minimum est pris:


0 commentaires

7
votes

Je recommande Imageresizer :

Les caractéristiques de clé sont les suivantes: < ul>

  • API de l'image de l'URL reposante (exemple: src = "img.jpg? w = 170")
  • culture intuitivement, redimensionnez, tournez, retournez, contraignez et encodez
  • rendu pdfs en images
  • 19 plugins gratuits couvrent les tâches les plus courantes
  • Disque + mise en scaching / sortie de la mémoire
  • TRAITEMENT GIF PNG / GIF et GIF Animé
  • Support de superposition de texte et d'image flexible
  • Suite de filtrage de l'image (licence des besoins)
  • haute performance
  • et plus ....

    pour l'installation avec Nuget: xxx

    Pour plus d'informations s'il vous plaît vérifier: http://imageresizing.net/docs/install/nuget


  • 1 commentaires

    Une note avec cela ayant utilisé imageesizer.net beaucoup. Le plug-in diskCache que vous avez énumérés ici fait partie du package Performance, si vous l'installez, sans licence payée (ce qui est assez coûteux), il rendra un petit point dans le coin.