#javascript #html5-canvas #base64
#javascript #html5-холст #base64
Вопрос:
Я пытался использовать canvas.toDataUrl
и canvas.toBlob
, чтобы получить строку изображения в кодировке base64 (скриншот).
В обоих toDataUrl
и toBlob
тип mime можно задать как image/jpeg
, image/png
и image/webp
, но можете ли вы установить для него значение none или application/octet-stream
?
пример.
let imgData = renderer.domElement.toDataURL('applicaton/octet-stream');
Всякий раз, когда я пытаюсь это сделать, он просто кодирует его с image/png
типом mime.
Если это невозможно, как я могу получить строку изображения в кодировке base64 с application/octet-stream
типом mime?
Ответ №1:
mime-тип, который вы передаете в этой функции, является подсказкой для браузера относительно того, какой кодировщик им следует использовать для создания файла изображения.
application/octet-stream
не соответствует ни одному кодировщику изображений и, следовательно, не поддерживается ни одним браузером.
Комментарии:
1. есть ли обходной путь? например, возможно, существует интерфейсная библиотека, которая будет кодировать большой двоичный объект или буфер массива без mime-типа или
application/octet-stream
? кажется, у меня проблемы с поиском чего-либо. эта строка base64 будет отправлена в виде данных на сервер, и я не могу использовать mime-тип дляimage/[png|jpeg]
2.Вы не понимаете… Перед вызовом toDataURL или toBlob ваш холст представляет собой просто набор необработанных пикселей с шириной и высотой => растровое изображение. Эти функции сгенерируют из него файл изображения. Существуют различные форматы файлов изображений. Эти файлы будут содержать двоичные данные, каждый из которых будет иметь свою собственную структуру данных для представления изображения.
application/octet-stream
это не формат изображения. Это никоим образом не представляет изображение. Вы должны знать, какие данные вы хотите установить в свой файл, прежде чем сможете использовать их в качестве octet-stream.3. И если все, что вам нужно, это удалить mime-тип, тогда просто сделайте
toDataURL().replace('data:image/png;base64,', "");