Можно ли дополнительно сжать строку Base64 PNG? - PullRequest
8 голосов
/ 19 марта 2012

У меня есть изображение PNG, и я получил его строковое представление Base64 PNG.Это все еще довольно большой, и я хотел бы знать, может ли это быть еще больше сжато.Это вообще возможно?

Фон

Я использую Selenium 2 (Java), чтобы создать скриншот текущей веб-страницы, преобразовать его в строку base64 и отправить эту строку исполнителю JavaScript ввоссоздать это изображение и сделать некоторую обработку изображения.Но если этот размер строки слишком велик, сервер возвращает исключение.

Ответы [ 3 ]

9 голосов
/ 19 марта 2012

Простой ответ: нет - не без потери природы "печатаемой строки"

Обычно PNG уже использует сложное сжатие, как в ZIP-файлах. Поэтому сжатие его перед применением кодировки base64 даст вам только очень ограниченное уменьшение размера.

Применение сжатия после кодирования base64 сделает его снова двоичными данными - в этом случае вы можете просто пропустить шаг кодирования base64.

1 голос
/ 01 апреля 2016

Если это проблема с сетью, а не размер вашей строки, это сработало для меня, когда я отправил свои изображения в базу данных Монго.

При использовании Express.js предел bodyParser по умолчанию равен 1056k. так что вы можете решить проблему, изменив лимит, как показано ниже.

app.use(bodyParser.urlencoded({ limit: '50mb', 
  extended: true
}));
app.use(bodyParser.json({ limit: '50mb' }));
0 голосов
/ 21 марта 2019

Вы можете сэкономить несколько сотен байтов, используя алгоритм Длина кодирования .

Например,

const encode = (plainText) => {
  const consecutiveChars = /([\w\s])\1*/g;
  return plainText.replace(consecutiveChars,
    match => (match.length > 1 ? match.length + match[0] : match[0]));
};

(кредит: https://github.com/exercism/javascript/blob/master/exercises/run-length-encoding/example.js)

тест: expect(encode('AABBBCCCC')).toEqual('2A3B4C')

...