Wie kann die Bytegröße einer Datei erhöht werden, ohne den Inhalt zu beeinträchtigen?

Wie kann die Bytegröße einer Datei erhöht werden, ohne den Inhalt zu beeinträchtigen?

Gibt es eine Möglichkeit, die Bytegröße einer Datei einfach und beliebig zu erhöhen, ohne den Inhalt zu beschädigen? Zum Beispiel durch Einfügen von Dummy-Bytes. Die Datei für meinen Anwendungsfall ist vom Typ PNG.

Ich verwende OS X, aber alle Lösungen sind willkommen.

Antwort1

Die wörtliche Antwort auf Ihre Frage lautet per Definition nein. Die Größe einer Datei ist die Länge ihres Inhalts. Wenn Sie die Größe ändern möchten, müssen Sie den Inhalt ändern.

Es ist jedoch möglich, den Inhalt zu ändern undgleichwertiger Inhaltdas eine andere Größe hat. Ob dies möglich ist, hängt vom Dateiformat ab und davon, was Sie als gleichwertig betrachten.

Wenn die Datei beispielsweise ein PNG-Bild ist und Sie zwei Dateien mit PNG-Bildern als gleichwertig betrachten, wenn die angezeigten Bilder gleich sind, können Sie die Datei vergrößern, indem Sie das Kommentarfeld in der Datei hinzufügen (oder verlängern). Zum Beispiel mitBildMagick:

convert old.png -comment 'This comment will be added to the image file, making it larger' new.png

Die maximale portable Kommentargröße beträgt2 GB(Sie können möglicherweise bis zu 4 GB hochgehen.) Sie können grundsätzlich mehrere Kommentare einfügen (oder andere Feldnamen verwenden), aber ich weiß nicht, ob gängige Programme dies gut unterstützen.

Um das Beispiel eines PNG-Bildes fortzusetzen: Viele Programme akzeptieren Dateien, die ein gültiges PNG-Bild plus zusätzlichen Inhalt enthalten, als wäre es nur das PNG-Bild ohne diesen zusätzlichen Inhalt. Daher akzeptieren viele Programme das Bild immer noch, wenn Sie am Ende Müll anhängen:

cp old.png new.png
echo 'trailing garbage' >>new.png

Du kannstVerwenden Sie den truncateBefehlum einfach Nullbytes anzuhängen, um eine bestimmte Größe zu erreichen. Denken Sie nur daran, dass die resultierende Datei allgemein akzeptiert wird, aber technisch gesehen ungültig ist und daher möglicherweise nicht überall akzeptiert wird. (Es scheint in jedem Programm zu funktionieren, das verwendetpng-Dateioder ein Derivat, und diese Bibliothek ist weit verbreitet, also besteht eine gute Chance, dass die Datei funktioniert.)

Antwort2

Der truncateBefehl verfügt über eine wenig bekannte Option zum Erhöhen der Dateigröße durch Hinzufügen von Nullbytes, die im Inhalt nicht sichtbar sind, es sei denn, Sie verwenden einen Editor, der diese explizit anzeigt, wie etwa vim.

Die richtige Syntax wird erklärtin der Manpage, aber im Allgemeinen übergeben Sie die -sOption und geben entweder die gewünschte Größe für die Datei an -s 10koder fügen ein „+“ hinzu, um -s +10kder Datei entsprechend viele Nullbytes hinzuzufügen.

Die hinzugefügten Bytes werden am Ende eingefügt. In Ihrem Anwendungsfall sind diese Nullen bei normaler Anzeige im Bild nicht sichtbar.

Antwort3

Abhängig von Ihrem Zweck können Sie eineSparse-Datei. Zum Beispiel...

dd of=sparse bs=5M seek=1 count=0

Dadurch wird eine Datei erstellt, die 5 Megabyte groß zu sein scheint, aber 0 Speicherplatz belegt. Beim Lesen wird der „zusätzliche Speicherplatz“ als Null angezeigt.

Sie können eine vorhandene Datei mit spärlich machen truncate -s. Ich habe beispielsweise dieses animierte GIF so gestaltet, dass es 5 Megabyte groß erscheint, aber nur 102 Kilobyte auf der Festplatte belegt.

$ ls -l pikachu-nyan.gif 
-rw-r--r-- 1 schwern staff 100872 Oct 29  2019 pikachu-nyan.gif

$ truncate -s 5M pikachu-nyan.gif 

$ ls -l pikachu-nyan.gif 
-rw-r--r-- 1 schwern staff 5242880 Jan  9 14:32 pikachu-nyan.gif

Die Finder-Informationen zur Datei lauten ...5,242,880 bytes (102 KB on disk)

Ob dies gültig ist oder nicht, hängt davon ab, wie Sie die Datei verwenden. Im obigen Beispiel funktioniert das animierte GIF weiterhin in Firefox.

verwandte Informationen