Data URI (Uniform Resource Identifier) — способ представления ресурсов, таких как изображения или шрифты, непосредственно в коде в виде строки. Это особенно полезно для A-Frame, когда требуется встроить текстуры, аудио или модели без отдельного запроса к серверу.
Использование data URI позволяет ускорить загрузку сцены, уменьшить количество сетевых запросов и упростить распространение проектов, так как все ресурсы хранятся в одном файле HTML.
Data URI имеет формат:
data:[<тип_данных>][;base64],<данные>
<тип_данных> — MIME-тип ресурса, например
image/png или audio/mpeg.;base64 — обязательный флаг для двоичных данных.<данные> — закодированное содержимое ресурса в
base64 или в ASCII, если это текст.Пример изображения PNG:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />
В A-Frame такой URI можно использовать в атрибутах компонентов,
например src для текстур.
В A-Frame компонент material поддерживает указание
текстуры через src. Для использования data URI:
<a-box position="0 1 -5" rotation="0 45 0" width="2" height="2" depth="2"
material="src: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...); repeat: 2 2">
</a-box>
Ключевые моменты:
url() внутри src необходим даже для data
URI.repeat работает как с обычными изображениями,
так и с data URI.material,
например color и transparent.Data URI может использоваться для простых форматов 3D, таких как
OBJ или GLTF. Для больших моделей это
неэффективно, но для миниатюрных объектов подходит отлично.
Пример с GLTF:
<a-entity gltf-model="url(data:model/gltf-binary;base64,AAAAFGZ0eXB...)"
position="0 0 -3" rotation="0 180 0">
</a-entity>
Особенности:
model/gltf-binary для бинарных
.glb и model/gltf+json для
.gltf.Компонент sound в A-Frame может принимать data URI в
качестве источника:
<a-entity sound="src: url(data:audio/mpeg;base64,//uQxAA...); autoplay: true; loop: true"></a-entity>
Особенности использования:
autoplay, loop и
volume работают как с обычными файлами.Для создания data URI обычно используется утилита или встроенный скрипт. На Node.js:
const fs = require('fs');
const image = fs.readFileSync('texture.png');
const base64 = image.toString('base64');
const dataUri = `data:image/png;base64,${base64}`;
console.log(dataUri);
Для веб-приложений можно использовать FileReader:
const fileInput = document.querySelector('#file');
fileInput.addEventListener('change', function() {
const reader = new FileReader();
reader.onl oad = function(e) {
console.log(e.target.result); // data URI
};
reader.readAsDataURL(this.files[0]);
});
Преимущества:
Ограничения:
;base64 для бинарных данных.Использование data URI в A-Frame позволяет создавать полностью самодостаточные сцены, где ресурсы встроены прямо в HTML, что облегчает распространение и ускоряет прототипирование.