Навярно това е глупава идея. Но понякога и най-глупавите идеи водят до неочаквани резултати.
Текстът на трагедията „Ромео и Жулиета“ на Шекспир се състои от около 146 000 символа. Благодарение особеностите на английската азбука всеки символ може да бъде описан с помощта на един байт. Така че размерът на един обикновен текстов файл в Unicode формат възлиза на около 142 KB.
В статията Adventures With Compression (Приключения с компресирането) нейният автор JamesG разсъждава върху конкурса за компресиране на текст и предлага една любопитна идея:
„Кодирайте текста като изображение и компресирайте това изображение. Ще ми трябва алгоритъм за компресиране на изображения без загуби. Използването на RGB ще увеличи броя на стойностите, свързани с всяка дума. Може би трябва да превърна изображението в оттенъци на сивото? ИлСтрува си изследването на тази малко налудничава идея“.
Алгоритмите за компресиране на изображения обикновено са много добри в намирането на моделите и шаблоните в изображенията и тяхното компресиране. Дали този вид компресия на изображенията би ни помогнала, ако преобразуваме текста в изображение?
Английският език и неговата пунктуация не са особено сложни, така че пиесата съдържа само 77 уникални символа. ASCII стойността на всеки символ е между 0 и 127. Нека създадем изображение в сиви тонове, в което всеки пиксел има същото ниво на сивото, както ASCII стойността на символа.
Ето как изглежда то след PNG компресиране без загуби:

Размерът е намалял до 55 KB! Това е около 40% от първоначалния размер на файла. Това е малко по-малко от ZIP и с около 9 байта повече от компресията на Brotli.
Файлът може да бъде прочетен със следния неособено сложен код на Python:
from PIL import Image
image = Image.open("ascii_grey.png")
pixels = list(image.getdata())
ascii = "".join([chr(pixel) for pixel in pixels])
with open("rj.txt", "w") as file:
file.write(ascii)
Но е малко вероятно дори с най-съвременните алгоритми за компресиране на изображения да може това изображение да бъде компресирано още повече – картината изглежда като случаен шум. Да, вие и аз знаем, че тя съхранява данни. И един статистик, който изчислява ентропията, вероятно би определил, че файлът съдържа данни, които могат да бъдат прочетени. Но алгоритмите за компресиране на изображения работят в съвсем друга сфера. Те търсят блокове с един и същи цвят, предсказуеми градиенти и други статистически характеристики.
Все пак се получи! Компресирането на изображения без загуби е доста ефективен начин за компресия на ASCII текстове.
Да напомним, че PNG (portable network graphics) е формат за съхранение на графична информация, който използва компресия без загуби с помощта на алгоритъма Deflate.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!