devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
69 lines (68 loc) • 2.8 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\utils\base64ImageParser.js)
* Version: 20.2.13
* Build date: Apr 10, 2023
* Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
;
Object.defineProperty(exports, "__esModule", { value: true });
var Base64ImageParser = (function () {
function Base64ImageParser() {
}
Base64ImageParser.getImageRatio = function (data, format) {
var imageRatio = { x: 1, y: 1 };
var byteArray = this._getDataChunks(data, format);
if (format === 'png') {
if (!this._pngHasDpiChunks(data) || byteArray.length < 8)
return imageRatio;
var dpiX = this._countDpiFromBytes(byteArray.slice(0, 4));
var dpiY = this._countDpiFromBytes(byteArray.slice(4, 8));
}
if (format === 'jpg' || format === 'jpeg') {
if (byteArray.length < 4)
return imageRatio;
var dpiX = this._countDpiFromBytes(byteArray.slice(0, 2));
var dpiY = this._countDpiFromBytes(byteArray.slice(2, 4));
}
if (dpiX && dpiY) {
var ppi = this.getMonitorPPI();
imageRatio.x = ppi / dpiX;
imageRatio.y = ppi / dpiY;
}
return imageRatio;
};
Base64ImageParser._getDataChunks = function (encoded, format) {
var byteArray = [];
if (!encoded)
return [];
var decodeString = atob(encoded);
var startOfChunks = format === 'png' ? decodeString.indexOf('pHYs') + 4 : 14;
if (startOfChunks == 3 || startOfChunks >= decodeString.length)
return [];
for (var i = startOfChunks; i < decodeString.length; i++) {
byteArray.push(decodeString.charCodeAt(i));
}
return byteArray;
};
Base64ImageParser._countDpiFromBytes = function (byteArray) {
var defaultValuePerMeter = 39.370;
if (byteArray && byteArray.length == 4)
return ((byteArray[0] << 24) + (byteArray[1] << 16) + (byteArray[2] << 8) + byteArray[3]) / defaultValuePerMeter;
if (byteArray && byteArray.length == 2)
return (byteArray[0] << 8) + byteArray[1];
};
Base64ImageParser._pngHasDpiChunks = function (data) {
return data.indexOf('AAlwSFlz') != -1 || data.indexOf('AAAJcEhZ') != -1 || data.indexOf('AAAACXBI') != -1;
};
Base64ImageParser.getMonitorPPI = function () {
var el = document.createElement('div');
el.style.width = '1in';
document.body.appendChild(el);
var ppi = el.offsetWidth;
document.body.removeChild(el);
return ppi;
};
return Base64ImageParser;
}());
exports.Base64ImageParser = Base64ImageParser;