[DLL] NJZlib, dll per la compressione dei file

Gex, Dll, DyLib, Js e ogni tipo di estensione per GameMaker
Rispondi
Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

[DLL] NJZlib, dll per la compressione dei file

Messaggio da Jak »

Visto che per lavori miei dovevo assolutamente trovare un sistema di compressione di dati e file mi sono messo a sbattere la testa per creare una dll per la compressione dei file(anche della memoria ma con game maker non si può fare quindi...)

Eccovi la mia creatura di soli 61 kb:
http://njgames.altervista.org/files_misti/NJZlib.7z
L'archivio(compresso con 7z, non con la mia dll :lol: ) contiene due file, la dll ed un semplicissimo esempio che contiene tutto.
Per fare i test ho usato un txt ed un bmp da circa 10-12 megabyte che vengono compressi e decompressi in meno di mezzo secondo. E' inutile postarvi i file di esempio in quanto vi basta veramente poco per creare un'immagine bmp 2048x2048. Sicuramente da qualche parte nel vostro pc avete un bel po di file abbastanza grossi quindi non perdo tempo.

La dll è basata sulla libreria zlib
http://zlib.net/
che fa praticamente tutto il lavoro anche se ci è voluto un giorno intero tra le varie problematiche per fare questa dll.

La dll è composta da 2 sole funzioni:
NJZ_compress(input file, output file)
NJZ_decompress(input file, output file)
Che direi non servono essere spiegate, dategli come input il file da comprimere e come output il nome del file generato.
Input ed output file non possono essere identici.
In caso di errore come file di input inesistenti o inaccessibili la funzione restituirà false mentre se riuscirà a comprimere il file restituirà true(utile per sapere se ha funzionato o no).

Il file generato può avere una qualunque estensione in quanto è solamente un file tuttavia POTRA' ESSERE DECOMPRESSO SOLO ED ESCLUSIVAMENTE DALLA MIA DLL!!!
Quindi andateci piano.

La dll come potete constatare è molto veloce e comprime i file con lo stesso algoritmo usato per i png, tuttavia anche se ho aggiunto controlli sulla riuscita nella compressione il lavoro può essere migliorato. La dll non è ancora progettata bene e copia tutto il file in memoria quindi potrebbe causare facilmente out of memory. Quindi cercate di evitare file eccessivamente grossi, preferibilmente mai sopra i 100 MB anche se dubito ci arriverete mai. Tuttavia comprimere molti piccoli file uno alla volta risolverà tutti i vostri problemi.

L'esempio originale è stato fatto con gm 8.1 ed è stato successivamente portato e provato su gm8.0 e funziona su entrambi quindi nell'archivio troverete l'editabile in formato gmk per compatibilità.

Prossimi obiettivi:
-comprimere il file un po alla volta così da non andare in out of memory.
-Inserire un basilare sistema di criptaggio tramite password che male non fa
-idee?


Licenza: Questa dll è utilizzabile da chiunque gratuitamente anche a scopo commerciale.
Non è necessario creditarmi anche se è consigliabile inserire un link nei vostri giochi per farla conoscere ad altri.
Ultima modifica di Jak il 11/06/2012, 13:00, modificato 1 volta in totale.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
enick
GMI VIP
Messaggi: 3749
Iscritto il: 26/06/2011, 19:34
Specialità: 39dll e 3D
Località: Sardegna
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da enick »

davvero ottimo,mi sarà utilissima, per il criptaggio sono daccordissimo
Nicola porcu(Sardegna)
ImmagineImmagine
Immagine
Are you sleeping?
[email protected]

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Tizzio »

Potresti aggiungere una funzione per criptare e decriptare una stringa?
senza files esterni...
Itendo proprio
string_crypt(str,password)
string_decrypt(str,password)

la funzione restituirà la stringa crittata o decrittata

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Jak »

Bè, per una cosa simile direi che tanto vale farci un'altra dll.
Si la posso fare ma finchè parliamo di una dll per la compressione che tra le altre cose cripta pure posso fare una cosa semplice mentre per criptare una stringa dovrei studiarmi qualche algoritmo di criptatura più complesso. :fapensare:
Vedrò che posso fare comunque si, bella idea.
Secondo voi è meglio fare una dll a parte o mettere tutte le funzioni solo su questa?
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Tizzio »

Beh a me servirebbe quella delle stringhe
perché in GML é lentuccio
se vuoi farla a parte la userei di sicuro

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Jak »

Aggiunta la possibilità di criptare i file tramite password!!!
Il link è sempre lo stesso, la dll ora è passata a ben 64 kb, un'enormità :lol:
La velocità nel comprimere i file è pressochè identica con file relativamente piccoli(circa 12 megabyte) quindi direi che non ci sono problemi tuttavia ho tenuto anche le vecchie funzioni.
Ora che ci penso ho messo che non esegue alcun codice se la stringa è vuota "" quindi potrei anche eliminare le vecchie funzioni visto che è possibile ottenere lo stesso risultato. :fapensare:
L'algoritmo di criptatura è decisamente semplice tuttavia, anche per questioni di velocità, viene utilizzato sui dati compressi quindi senza una logica ben precisa risultando molto difficile trovare una "chiave di lettura" per i programmi di hacking.
Probabilmente non aggiungerò anche lo spezzettamento dei file visto che comprimerebbe meno e mi renderebbe più difficile la vita, dopotutto è praticamente impossibile con game maker ritrovarsi con un file esterno da più di 10 MB e sopratutto non già compresso(es, png, mp3 ecc) dove la compressione è praticamente inutile.
Una cosa che forse aggiungerò è il livello di compressione lasciandovi decidere se prediligere la compressione o le prestazioni.

A breve posterò la versione con due sole funzioni così da essere più minimale possibile :sisisi:
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Jak »

Xeryan ha scritto:hmm forse si potrebbe risparmiaree chiamate e quindi velocizzare con una funzione che prende una lista di files da comprimere
Un richiamo a dll non è "così" pesante. Anche se decidete di decomprimere un migliaio di file che in tutto fanno boh, 100 MB la differenza dovuta alle chiamate a funzione non è così grande. Mi pare che potete tenervi sui 60 fps con 500 chiamate a dll quindi non sentirete nemmeno la differenza rispetto alla decompressione del file :roll:
Senza contare che ti toccherebbe smanettare con gm per fare la lista dei file quindi rischi anche di rimetterci :lol:

Ho aggiornato il file togliendo le funzioni originarie, ora ci sono solo quelle con criptatura visto che basta usare una password vuota "" per non usarla.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Tizzio »

Xeryan ha scritto:ci vorrebbe il packing di files come GMZ, allora potrei utilizzarla
quello che gli ho risposto l'altro giorno alla domanda "perchè non usi la mia?"

mah, sinceramente non trovo differenze, nell'usare una o l'altra, era più una discussione di "made in italy", ma se mancano le features, non posso usarla...

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Jak »

Ho fatto il sistema di packing giusto ieri e domani passerò a inserirla nel sistema di compressione anche se forse sarebbe meglio riorganizzare meglio la struttura del file...
Visto che me lo chiedete in molti devo assolutamente farlo :D
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Tizzio »

Jak ha scritto:Ho fatto il sistema di packing giusto ieri e domani passerò a inserirla nel sistema di compressione anche se forse sarebbe meglio riorganizzare meglio la struttura del file...
Visto che me lo chiedete in molti devo assolutamente farlo :D

2 features NECESSARIE(che in gmz non ci sono)
-estrarre in una cartella che voglio io, e non perforza in working directory
-possibilità di criptare senza avere errori nelle immagini :fapensare: (cosa molto strana)

se fai queste 2 cose hai superato di gran lunga gmz, e ti faccio una gex (non perchè non ne sei capace, ma perchè mi serve, quindi tantovale pubblicarla :lol: )

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Jak »

Tizzio ha scritto:se fai queste 2 cose hai superato di gran lunga gmz, e ti faccio una gex (non perchè non ne sei capace, ma perchè mi serve, quindi tantovale pubblicarla :lol: )
La posso fare anche io :lol:
Tizzio ha scritto:2 features NECESSARIE(che in gmz non ci sono)
-estrarre in una cartella che voglio io, e non perforza in working directory
-possibilità di criptare senza avere errori nelle immagini :fapensare: (cosa molto strana)
Facilerrime da fare. Stavo pensando che a sto punto mi conveniva usare il source di 7zip ma ho provato varie volte e dell'lzma non ci capisco niente :(
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [DLL] NJZlib, dll per la compressione dei file

Messaggio da Tizzio »

Jak ha scritto:La posso fare anche io :lol:
meglio, lavoro risparmiato 8)

già che ci sei ti cosiglio di pubblicarla su gmc
c'è tanta gente che cerca un estensione simile, ed esiste solo quella porca/bugga ta

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti