in client/src/services/google/image-recognition.ts [87:121]
public async loadDescriptions(imageData: Blob): Promise<ImageDescription[]> {
if (this.baseConfig.validImageFormats.indexOf(imageData.type) < 0) {
throw new InvalidFormatError('Image is not in supported format');
}
if (imageData.size > this.baseConfig.maxFileSize) {
logger.log('Image file size is too large - resizing: ' + imageData.size);
imageData = await resizeImage(imageData, this.baseConfig.resizedImageDimension,
this.baseConfig.resizedImageDimension, this.baseConfig.resizedImageQuality);
logger.log('New image size: ' + imageData.size);
}
return new Promise<ImageDescription[]>((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
const imageURL = reader.result as string;
const imageDataBase64 = imageURL.split(',')[1]; // remove data scheme prefix
this.loadImageDescriptions(imageDataBase64).then(
response => {
let descriptions = null;
try {
descriptions = this.filterImageDescriptions(response);
} catch (err) {
logger.warn('Error in image response', err);
reject(err);
return;
}
resolve(descriptions);
}, reject);
};
reader.onerror = err => {
logger.warn('Error reading image data', err);
reject(err);
};
reader.readAsDataURL(imageData);
});
}