[Glitch] Resize images by area instead of fixed dimensions

Port WebUI part of 0fb0037ca7 to glitch-soc
remotes/1727458204337373841/tmp_refs/heads/signup-info-prompt
Thibaut Girka 2018-07-30 14:44:17 +02:00 committed by ThibG
parent ce090a5201
commit 1bae4c4f83
1 changed files with 4 additions and 14 deletions

View File

@ -1,6 +1,6 @@
import EXIF from 'exif-js'; import EXIF from 'exif-js';
const MAX_IMAGE_DIMENSION = 1280; const MAX_IMAGE_PIXELS = 1638400; // 1280x1280px
const getImageUrl = inputFile => new Promise((resolve, reject) => { const getImageUrl = inputFile => new Promise((resolve, reject) => {
if (window.URL && URL.createObjectURL) { if (window.URL && URL.createObjectURL) {
@ -73,18 +73,8 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) =
const resizeImage = (img, type = 'image/png') => new Promise((resolve, reject) => { const resizeImage = (img, type = 'image/png') => new Promise((resolve, reject) => {
const { width, height } = img; const { width, height } = img;
let newWidth, newHeight; const newWidth = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (width / height)));
const newHeight = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (height / width)));
if (width > height) {
newHeight = height * MAX_IMAGE_DIMENSION / width;
newWidth = MAX_IMAGE_DIMENSION;
} else if (height > width) {
newWidth = width * MAX_IMAGE_DIMENSION / height;
newHeight = MAX_IMAGE_DIMENSION;
} else {
newWidth = MAX_IMAGE_DIMENSION;
newHeight = MAX_IMAGE_DIMENSION;
}
getOrientation(img, type) getOrientation(img, type)
.then(orientation => processImage(img, { .then(orientation => processImage(img, {
@ -104,7 +94,7 @@ export default inputFile => new Promise((resolve, reject) => {
} }
loadImage(inputFile).then(img => { loadImage(inputFile).then(img => {
if (img.width < MAX_IMAGE_DIMENSION && img.height < MAX_IMAGE_DIMENSION) { if (img.width * img.height < MAX_IMAGE_PIXELS) {
resolve(inputFile); resolve(inputFile);
return; return;
} }