#javascript #html #html5-canvas #byte
#javascript #HTML #html5-холст #байт
Вопрос:
Код:
// Create a new canvas
var canvas = document.createElement('canvas');
canvas.width = canvas.height = 100;
document.body.appendChild(canvas);
// Get drawing context
var ctx = canvas.getContext('2d');
// Get image data
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
Как вычислить размер объекта ImageData в байтах?
Ответ №1:
ImageData.data имеет тип Uint8ClampedArray длиной 1 байт .
Итак: imageData.data.length
даст вам размер в байтах, который должен быть равен canvas.width * canvas.height * 4
.
Вы умножаете ширину и высоту на 4, потому что каждый пиксель хранит 4 байта, RGBA .
Комментарии:
1. я получил 307200 байт ==> это значение невероятно
2. @MoathHowari: какую ценность вы ожидаете? Не забывайте, что JPEG-файлы сжимаются и что степень сжатия в 10 и более раз легко достигается с небольшими искажениями.
3. @GameAlchemist но если я преобразовываю холст в изображение и сохраняю его, я не получаю такого большого размера, объясните это
4. Это зависит от того, как сохранить изображение, сжатие в формате jpeg и gif даст разные результаты. Значение , которое вы получаете , — это необработанные данные изображения .
5. Какой формат / качество вы используете? jpeg будет хорошо смотреться на фотографии, когда png будет хорошо смотреться с векторной / мультяшной графикой. Что касается размера необработанных данных: размера, используемого в памяти видеокарты для хранения изображения — в обычном случае — ответ Александра в самый раз: 4 * ширина высота. Фактически, с устройствами hidpi элемент * Canvas будет использовать devicePixelRatio context.backingStoreRatio*4* canvas.width canvas.height , но это уже другая история … html5rocks.com/en/tutorials/canvas/hidpi