A suite to track Project Diva score statistics and ratings / D4DJ event data.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
projectdivar/server/node_modules/image-pixels/lib/raw-browser.js

69 lines
1.6 KiB

// universal pixel data getter
'use strict'
var imgType = require('image-type')
var tostr = require('arraybuffer-to-string')
var cache = require('./cache')
var canvas, context
module.exports = function readRaw(img, o) {
var width = o.shape[0], height = o.shape[1]
var clip = o.clip
var type = o.type
if (!canvas) {
canvas = document.createElement('canvas')
context = canvas.getContext('2d')
}
canvas.width = width
canvas.height = height
if (img instanceof Uint8Array || img instanceof Uint8ClampedArray) {
// decode encoded data
if (!type) {
type = imgType(img)
type = type && type.mime
}
if (type) {
var src = img
return new Promise(function (ok, nok) {
var img = new Image()
img.crossOrigin = 'Anonymous'
img.onload = function() {
if (!o.shape[0]) o.shape[0] = img.width
if (!o.shape[1]) o.shape[1] = img.height
ok(readRaw(img, o))
}
img.onerror = function(err) {
nok(err)
}
img.src = ['data:' + type, 'base64,' + tostr(src, 'base64')].join(';')
})
}
// raw data
if (!width || !height) throw new Error('Raw data requires options.width and options.height')
var rawData = context.createImageData(width, height)
rawData.data.set(img)
context.putImageData(rawData, 0, 0)
}
// default img-like object
else {
context.drawImage(img, 0, 0)
}
var result
if (o.cache) {
result = context.getImageData(0, 0, width, height)
cache.set(o.cache, result)
}
result = context.getImageData(clip.x, clip.y, clip.width || width, clip.height || height)
return Promise.resolve(result)
}