2009-08-12 5 views
5

Ich habe ein paar JPG-Bilder. Einige von ihnen Mai haben einen schwarzen Rand auf einer oder mehreren Seiten, und ich möchte sie entfernen. Die schwarze Umrandung darf nicht um das eigentliche Bild herumgehen - manche haben nur die Umrandung unten (mit dem eigentlichen Bild oben), während andere zentriert sein können (dh schwarze Umrandungen auf zwei Seiten, aber nicht verbunden). Schlimmer noch, die Bilder sind JPG-komprimiert, so dass sie nicht mehr genau 0,0,0 schwarz sind. In einem Malprogramm würde ich "einfach" das Zauberstab-Werkzeug mit einer geringen Toleranz verwenden, aber ich muss es in C# auf ASP.net machen, und ich weiß nicht, was der beste Weg ist, dies zu tun ist.Entfernen der schwarzen Umrandung um ein Bild

Sollte ich jede Zeile und dann jede Spalte (zwei verschachtelte For-Schleifen) "scannen", um schwarze Bereiche zu finden? Klingt etwas doof zu tun, Leistung und CPU-Load-weise. Oder hat GDI + bereits ein Zauberstab-Werkzeug eingebaut?

Die Bilder sind nicht so groß (474x474 Pixel maximal) und im Cache gespeichert, aber ich muss die Serverlast so niedrig wie möglich halten.

Irgendwelche Hinweise, was die am wenigsten blöde Art wäre, es zu tun?

Antwort

4

Es scheint wie für jede Kante, die Sie so etwas tun könnten:

for each edge: 
    for (i = 0; ; i++) { 
     compute average pixel value along edge row/column + i 
     if (average value > threshold) 
       break; 
    } 
    crop image 
+0

Dieser Ansatz scheint ein wenig Brute-Force (zwei for-Schleifen), aber es ist überraschend schnell (weniger als 1 Millisekunde pro Bild). Danke für die Idee mit dem Durchschnittswert Farbe. –

+1

Die traurige Wahrheit bei der Bildverarbeitung ist, zumindest auf einer niedrigeren Ebene, dass Sie über alle Pixel von Interesse iterieren müssen. Seien Sie auch vorsichtig bei dieser Methode, wenn Benutzer hauptsächlich schwarze Bilder hochladen können. Vielleicht eine Obergrenze für die zulässige Rahmengröße festlegen. – Eric

Verwandte Themen