-
+
diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js
index fee42a52..193f5c4d 100644
--- a/client/components/Reader/share/bookManager.js
+++ b/client/components/Reader/share/bookManager.js
@@ -4,6 +4,7 @@ import _ from 'lodash';
import BookParser from './BookParser';
import readerApi from '../../../api/reader';
+import coversStorage from './coversStorage';
import * as utils from '../../../share/utils';
const maxDataSize = 500*1024*1024;//compressed bytes
@@ -351,7 +352,12 @@ class BookManager {
let coverPageUrl = '';
if (parsed.coverPageId && parsed.binary[parsed.coverPageId]) {
const bin = parsed.binary[parsed.coverPageId];
- const dataUrl = await utils.resizeImage(`data:${bin.type};base64,${bin.data}`);
+ let dataUrl = `data:${bin.type};base64,${bin.data}`;
+ try {
+ dataUrl = await utils.resizeImage(dataUrl, 160, 160, 0.94);
+ } catch (e) {
+ console.error(e);
+ }
//отправим dataUrl на сервер в /upload
try {
@@ -361,6 +367,10 @@ class BookManager {
} catch (e) {
console.error(e);
}
+
+ //сохраним в storage
+ if (coverPageUrl)
+ await coversStorage.setData(coverPageUrl, dataUrl);
}
const result = Object.assign({}, meta, parsedMeta, {
diff --git a/client/share/utils.js b/client/share/utils.js
index c0f20519..39196212 100644
--- a/client/share/utils.js
+++ b/client/share/utils.js
@@ -365,6 +365,48 @@ export function getBookTitle(fb2) {
return result;
}
-export async function resizeImage(dataUrl) {
- return dataUrl;
+export function resizeImage(dataUrl, toWidth, toHeight, quality = 0.9) {
+ return new Promise ((resolve, reject) => { (async() => {
+ const img = new Image();
+
+ let resolved = false;
+ img.onload = () => {
+ try {
+ let width = img.width;
+ let height = img.height;
+
+ if (width > height) {
+ if (width > toWidth) {
+ height = height * (toWidth / width);
+ width = toWidth;
+ }
+ } else {
+ if (height > toHeight) {
+ width = width * (toHeight / height);
+ height = toHeight;
+ }
+ }
+
+ const canvas = document.createElement('canvas');
+ canvas.width = width;
+ canvas.height = height;
+ const ctx = canvas.getContext('2d');
+ ctx.drawImage(img, 0, 0, width, height);
+ const result = canvas.toDataURL('image/jpeg', quality);
+ resolved = true;
+ resolve(result);
+ } catch (e) {
+ reject(e);
+ return;
+ }
+ };
+
+ img.onerror = reject;
+
+ img.src = dataUrl;
+
+ await sleep(1000);
+ if (!resolved)
+ reject('Не удалось изменить размер');
+ })().catch(reject); });
}
\ No newline at end of file