Laden...

TIFF Images mit CompressionType 2 mit C# lesen (und in welche mit Type 4 konvertieren)

Erstellt von martin0815 vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.614 Views
Thema geschlossen
M
martin0815 Themenstarter:in
3 Beiträge seit 2013
vor 11 Jahren
TIFF Images mit CompressionType 2 mit C# lesen (und in welche mit Type 4 konvertieren)

Hi,

ich habe ein Problem, dass ich in einem C-Sharp Modul TIFF Dateien verarbeiten muss und bei manchen gibt es ein Problem mit dem Format.

Ich habe nun eine Methode im Web gefunden um den TIFF Compression Type zu bestimmen. Die folgende Methode gibt bei den funktionierenden TIFFs 4 zurück, bei den "falschen" kommt 2 zurück:


public static int GetCompressionType(Image image)
        {
            int compressionTagIndex = Array.IndexOf(image.PropertyIdList, 0x103);
            PropertyItem compressionTag = image.PropertyItems[compressionTagIndex];
            return BitConverter.ToInt16(compressionTag.Value, 0);
        }

Wie kann ich nun mit C-Sharp diese TIFF Datei lesen, in das CCITT Fax 4 Format konvertieren und dann wieder speichern?

Die Frage mag trivial sein, aber ich bin eigentlich kein C-Sharp Programmierer ^^

Hinweis von herbivore vor 11 Jahren

kleiner Ergänzung: CompressionType 2 ist CCITT modified Huffman RLE (Huffman coding, Run-length encoding)

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo martin0815,

ich weiß nicht, welche Kompressionstypen vom .NET Framework unterstützt werden, aber möglicherweise sind es nicht alle. Dein Fehler deutet ja darauf hin, dass es wohl nicht alle sind. In dem Fall wirst du eine externe Bibliothek verwenden müssen. Google ist dein Freund.

Eine andere Möglichkeit ist, dass das Framework die Kompression zwar unterstützt, aber die Dateien selbst korrupt sind. In dem Fall müsstest du an der Quelle ansetzen und dafür sorgen, dass die Dateien von Anfang an korrekt erstellt werden.

herbivore

175 Beiträge seit 2010
vor 11 Jahren

Hi,

"4" bedeutet Kompression nach CCITT Gruppe 4 (Fax G4 Standard). Die sollte eigentlich jeder TIFF-Dekompressor, der etwas auf sich hält, unterstützen. Es ist aber durchaus gut möglich, dass das .NET Framework nicht kann.

Ob die TIFFs korrupt sind oder nicht würde ich aber trotzdem vorher mal prüfen - einfach mal im GIMP, IrfanView, XnView oder sowas aufmachen...

Ansonsten 2 Tips: Du kannst auch eine 3rd Party TIFF-Library benutzen, wie z. B. LibTiff.Net - die kann auf jeden Fall G4-Kompression bzw Dekompression.

Und wenn Du sonst nix mit C# machst - wenn es auch native Code sein darf, dann nimm doch die LibTIFF - die hat ein kleines Tool namens "tiffcp" dabei, mit denen Du TIFFs konvertieren kannst - z. B. halt auch von einem Kompressionsverfahren in ein anderes....

Hope it helps,
Michael

Debuggers don't remove Bugs, they only show them in Slow-Motion.

M
martin0815 Themenstarter:in
3 Beiträge seit 2013
vor 11 Jahren

Hi,

ich habe keinen Einfluss auf die Quelle. Auch das Ziel hat nichts mit meinem Code zu tun. Es ist eine kommerzielle Software die nur manche TIFFs importiert und bei den anderen einen falschen Kompressionstyp meldet.

Daher habe ich diese Methode getCompressionType() verwendet um zu ermitteln, welche TIFFs nicht zu importieren sein werden.

Meine Frage zielte nun darauf, dass ich eine Bibliothek benötige mit der ich diesen Typ nicht nur erkennen kann. Mein Programm soll die Datei ja in das unterstütze Fax Group 4 encoding konvertieren.

Der Code bisher analysiert ja nur den Kompressionstyp.

Und ich habe bereits gegoogelt. Vielleicht finde ich nichts, da ich mich da ja nicht besonders auskenne. Aus diesem Grund habe ich es in dem Forum gepostet. Eventuell kennt jemand eine passende Bibliothek.

Eine andere Lösung wäre ein Kommandozeilentool für Windows oder Linux welches eine TIF konvertieren kann.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo martin0815,

was ist den mit den Treffern, die bei Google-Suche nach c# .net tiff bzw. Google-Suche nach c# .net tiff kommen (wahlweise auch nur mit C# oder nur mit .NET). Konkret, hast du es schon mit Gewusst wie: Codieren und Decodieren eines TIFF-Bilds und LibTiff.Net probiert und wenn nein, warum nicht? Und wenn ja, was genau geht damit und was nicht?

herbivore

175 Beiträge seit 2010
vor 11 Jahren

Meine Frage zielte nun darauf, dass ich eine Bibliothek benötige mit der ich diesen Typ nicht nur erkennen kann. Mein Programm soll die Datei ja in das unterstütze Fax Group 4 encoding konvertieren.

Und was stört Dich dann am von mir vorgeschlagenen Kommandozeilentool "tiffcp"? Bequemer gehts es ja nun wirklich nicht:

tiffcp -c g4 eingabe.tif ausgabe.tif

und fertig. Evtl. noch mit der Option "-r" spielen (z. B. "-r -1"). Aber das sollte es dann schon gewesen sein.

bye,
Michael

Debuggers don't remove Bugs, they only show them in Slow-Motion.

M
martin0815 Themenstarter:in
3 Beiträge seit 2013
vor 11 Jahren

Hi,

danke für den Tipp, dass mit tiffcp ist eigentlich das was ich suche.

Ich habe ein C-Sharp Programm, welches als Dienst läuft und diese TIFFs für einen Import in ein fremdes Programm vorbereitet.

Wie kann ich in dem C-Sharp Code dieses tiffcp synchron aufrufen?

In dem Code wird irgendwann jedes TIFF von einem Verzeichnis in ein Arbeitsverzeichnis kopiert. Hier würde ich den synchronen tiffcp Aufruf einbauen da ich vermute, dass man auch bereits korrekte G4 Tiffs damit kopieren kann und G2 Tiffs dann kopiert und gleichzeitig konvertiert werden.

Wie gesagt, der Code ist nicht von mir und ich bin jetzt nicht der Experte ^^

175 Beiträge seit 2010
vor 11 Jahren

Suche doch mal in google nach "C# create Process" und huuuuiiiiii, der erste Treffer ist es....

Debuggers don't remove Bugs, they only show them in Slow-Motion.

Hinweis von herbivore vor 11 Jahren

Bitte etwas mehr Eigeninitiative. Alles Informationen, nach denen du gefragt hast, hättest du leicht selbst herausfinden können. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.

Das ändert natürlich nichts daran, dass es im Normalfall besser ist, eine Bibliothek zu verwenden, statt ein externes Programm aufzurufen.

Thema geschlossen