Komprimierung mal anders?

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Komprimierung mal anders?

Beitrag 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
a²+b²=mc²
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Komprimierung mal anders?

Beitrag 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.
Zuletzt geändert von DarkDragon am 25.06.2011 11:36, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Komprimierung mal anders?

Beitrag 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. :wink: 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. :lol:
Zuletzt geändert von rolaf am 25.06.2011 11:39, insgesamt 1-mal geändert.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Komprimierung mal anders?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Komprimierung mal anders?

Beitrag 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))).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Komprimierung mal anders?

Beitrag von RSBasic »

@Kiffi
:mrgreen: 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. <)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Komprimierung mal anders?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: Komprimierung mal anders?

Beitrag von Kevin »

@Kiffi
Das ist ein alter Hut so etwas hat Jilocasin schon vor ein paar Jahren gemacht.
Ich finde es gerade nur nicht...
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Komprimierung mal anders?

Beitrag 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.
Zuletzt geändert von rolaf am 25.06.2011 12:25, insgesamt 3-mal geändert.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Komprimierung mal anders?

Beitrag von RSBasic »

@STARGÅTE
Jo, sieht fast wie mein damaliges Prog' aus. :lol:
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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten