Ridimensionamento delle immagini più veloce in .NET

Ho bisogno della libreria più veloce per ridimensionare le immagini a grandezza intera (alcune dimensioni fino a 9 MB) in più dimensioni .

Ecco lo scenerio:

  • L’utente carica una foto
  • un FileSystemWatcher è in esecuzione in un servizio che controlla la posizione di rilascio (su una SAN)
  • Quando viene visualizzata una nuova foto, il servizio creerà 4 versioni dell’immagine a piena qualità JPEG:
    • 100 px di larghezza
    • 320 px di larghezza
    • 640 px di larghezza
    • 1280 di larghezza

Non sono preoccupato se la libreria è C / C ++ o qualsiasi altra cosa per quello che riguarda, finché posso sfruttarla tramite .NET è bello.

Anche questo dovrà ridimensionare fino a 1000 utenti attivi .

Fatemi sapere i vostri pensieri 🙂

Ci sono molti articoli là fuori che mostrano le basi di questo . Ho usato i componenti di Atalasoft e li ho trovati di buona qualità. Ci sono sfumature per ridimensionare e lavorare con le immagini JPEG.

Sembra che tu ti preoccupi davvero delle prestazioni, ma in realtà non dai abbastanza informazioni per aiutarci a suggerirti buone ottimizzazioni. Qualunque cosa tu stia facendo, devi fare un’analisi completa delle prestazioni e capire cosa sta funzionando lentamente. In alcuni casi, il codice di elaborazione delle immagini può rallentare, ma può essere corretto se altre cose sono ottimizzate.

Una soluzione per le buone prestazioni è quella di accodare i file in entrata che devono essere convertiti. Aggiungi più macchine per gestire più messaggi nella coda o ottimizza il codice del servizio per ottenere un throughput migliore. Non è davvero così difficile gestire un numero elevato di utenti se si ottiene il design giusto.

Ecco il modo in cui vinci

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

e qui è la class TransformsdBitmap di WPF

Raccomando ImageResizer :

Le caratteristiche principali sono:

  • API immagine RESTful basata su URL (esempio: src = “img.jpg? W = 170”)
  • Ritaglia, ridimensiona, ruota, capovolgi, vincola e codifica in modo intuitivo
  • Renderizza PDF in immagini
  • 19 plugin gratuiti coprono le attività più comuni
  • Memoria di input / output su disco + memoria
  • PNG / GIF a 8 bit e elaborazione GIF animata
  • Supporto flessibile per sovrapposizione di testo e immagini
  • Suite di filtraggio delle immagini (richiede una licenza)
  • Alte prestazioni
  • e altro ancora ….

Per l’installazione con Nuget:

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

Per maggiori informazioni, consultare: http://imageresizing.net/docs/install/nuget

Se il denaro non è un object, LeadTools è la tradizionale libreria “vai a” per l’elaborazione delle immagini. Detto questo, la mia prima inclinazione sarebbe quella di codificarlo utilizzando le chiamate .NET GDI + e quindi fare qualche test. È probabile che questa soluzione sia sufficientemente performante, ma in caso contrario avremo una linea di base da cui è ansible confrontare altre librerie e soluzioni. Tutto ciò che riguarda la generazione di uno strumento da riga di comando comporterà la creazione di un processo separato per ciascuna immagine, che potrebbe annullare il vantaggio di passare al codice non gestito.

Non sono sicuro delle prestazioni, ma OpenCV open source è un’opzione.

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

La funzione cvResize ridimensiona l’immagine I in modo che si adatti esattamente a J. Se è impostata ROI, la funzione considera il ROI come supportato come al solito. l’immagine sorgente utilizzando l’elemento di strutturazione B specificato che determina la forma di un quartiere di pixel su cui viene preso il minimo: