Seite 1 von 2
Komprimierung mal anders?
Verfasst: 25.06.2011 11:28
von Kiffi
Hallo,
ich hatte grade ne Idee, wie man Dateien unkonventionell komprimieren
könnte. Man nehme eine beliebige Datei und wandele sie in ein Bild um.
Vier Bytes werden zu einem Pixel, wobei die Farbe des Pixels aus dem
Wert der Bytes resultiert (32Bit Farbtiefe). Hiernach speichert man das
so entstandene Bild als PNG ab, welches eine verlustfreie Komprimierung
(deflate) unterstützt.
Was denkt Ihr? Eine Scheißhaus-Idee (gemäß des Ortes, wo sie entstand)?
Grüße ... Kiffi
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 11:35
von DarkDragon
Also es bringt keinen Vorteil und einen Nachteil: der PNG Header ist dabei und die Dateigröße muss exakt durch 32bit teilbar sein.
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 11:35
von rolaf
Kiffi hat geschrieben:Was denkt Ihr? Eine Scheißhaus-Idee (gemäß des Ortes, wo sie entstand)?

Also ich denke gerade das ich auf den Scheisshaus auch immer die besten Ideen habe. Da ist man so entspannt und erleichert, vielleichts liegts aber auch am "Gas" in der Luft.

Aber egal ich finde deine Idee nicht schlecht, jedoch dürfte die Komprimierung als PNG wenig bringen, da ja hundertausende verschiedene Farben Pixel für Pixel nebeneinander entstehen. Zu komprimieren gibts da wenig.
Wäre aber interessant seine Daten als Bild zu sehen. Vielleicht schlummern da "Meisterwerke" in der Datensammlung.

Re: Komprimierung mal anders?
Verfasst: 25.06.2011 11:37
von STARGÅTE
Ich bezweifel das das Resultat sich dann stark von anderen Verfahren unterscheidet.
Schließlich ist PNG auch nur n Komprimierungsverfahren.
Und auch dieses Verfahren arbeitet ja nicht nach Pixel (bildlich gesprochen) sonden auch nur mit Bytes.
Es ist natürlich richtig das PNG nach anderen "Ähnlichkeiten" in einer Datei sucht als RAR oder ZIP.
Daher ist es auch klar, dass ein BMP-Bild welches RAR kompribiert ist größer ist als wenn es mit PNG komprimiert ist.
Ich bezweifel allerdings das bei einer Textdaei ähnlich ist, würde sogar behaupten es ist genau andersrum.
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 11:39
von DarkDragon
Ich fände es interessanter, wenn du Texte per DCT (JPEG) komprimierst, dann beim dekomprimieren die Rechtschreibfehler beseitigst und eine semantische Heuristik o.ä. einfügst.
Komprimierung wird nicht nur zum komprimieren verwendet, sondern auch zur Ähnlichkeitssuche (angenommen wir haben 3 gleich große Multimedia-Datensätze A, B, C, und man will wissen ob B zu A ähnlicher ist als C zu A, dann schaut man ob Komprimieren(Aneinanderhängen(A, B)) < Komprimieren(Aneinanderhängen(A, C))).
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 11:55
von RSBasic
@Kiffi

Hehe, so eine "Scheißhaus"-Idee hatte ich auch vor zwei Jahren und wollte versuchen, ebenfalls ein "gutes" Komprimierungsverfahren zu erstellen, aber war leider doch nicht so gut wie ich dachte.

Re: Komprimierung mal anders?
Verfasst: 25.06.2011 11:58
von STARGÅTE
Ich habe mal die Idee aufgegriffen und dieses Beispiel geschrieben:
Code: Alles auswählen
Enumeration
#File
#Image
#NewFile
EndEnumeration
Define X.i, Y.i, FileName.s
UsePNGImageEncoder()
UsePNGImageDecoder()
FileName = OpenFileRequester("Dateiauswahl", "", "*.*", 0)
If FileName And ReadFile(#File, FileName)
Length = Lof(#File)
Debug "Länge : "+Str(Length)
Size = Round(Sqr(Round(Length/4,#PB_Round_Up)),#PB_Round_Up)
Debug "Größe : "+Str(Size)+"×"+Str(Size)+"×32"
CreateImage(#Image, Size, Size, 32|#PB_Image_Transparent)
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AllChannels)
For Y = 0 To Size-1
For X = 0 To Size-1
If X = 0 And Y = 0
Plot(X, Y, Length)
Else
Plot(X, Y, ReadLong(#File))
EndIf
Next
Next
StopDrawing()
CloseFile(#File)
SaveImage(#Image, GetTemporaryDirectory()+GetFilePart(FileName)+".png", #PB_ImagePlugin_PNG)
Debug "Gespeichert als PNG : "+GetTemporaryDirectory()+GetFilePart(FileName)+".png"
Debug "Dateigröße : "+Str(FileSize(GetTemporaryDirectory()+GetFilePart(FileName)+".png"))
LoadImage(#Image, GetTemporaryDirectory()+GetFilePart(FileName)+".png")
CreateFile(#NewFile, GetTemporaryDirectory()+GetFilePart(FileName)+".png.txt")
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AllChannels)
For Y = 0 To Size-1
For X = 0 To Size-1
If X = 0 And Y = 0
Length = Point(X, Y)
Else
WriteLong(#NewFile, Point(X, Y))
EndIf
Next
Next
StopDrawing()
FileSeek(#NewFile, Length)
TruncateFile(#NewFile)
CloseFile(#NewFile)
RunProgram(GetTemporaryDirectory()+GetFilePart(FileName)+".png.txt")
Debug "Dekomprimiert als TXT : "+GetTemporaryDirectory()+FileName+".png.txt"
Debug "Länge : "+Str(Length)
EndIf
Funktioert erstaunlich gut (auch in Bezug) auch das Resultat.
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 12:00
von Kevin
@Kiffi
Das ist ein alter Hut so etwas hat Jilocasin schon vor ein paar Jahren gemacht.
Ich finde es gerade nur nicht...
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 12:07
von rolaf
STARGÅTE hat geschrieben:Funktioert erstaunlich gut (auch in Bezug) auch das Resultat.
Hier ne 60 kb Adressliste mit 800 Adressen auf 27 kb PNG-Bildchen gepackt.
Sind nach Adam Riese 45%.
Zip schafft auch nur 26 kb für die gleiche Datei.
Das Bildchen könnte man nun auf Papier archivieren, aber ich schätze mal die mangelnde Farbechtheit der Druckerfarben sowie ein Scanprozess würde die Daten schrotten.
Re: Komprimierung mal anders?
Verfasst: 25.06.2011 12:09
von RSBasic
@STARGÅTE
Jo, sieht fast wie mein damaliges Prog' aus.
Leider funktioniert es nur bedingt bzw. leider nicht so stark wie die Komprimierungsart wie bei WinRAR.
Einige Dateien lassen sich damit zwar gut komprimieren, aber nicht alle. Ich wollte damals eigentlich was Besseres "erschaffen", habe zwar versucht, aber bin damals gescheitert und habe aufgegeben.