Improve JPEG output quality

- Live camera: 0.92 -> 0.97 quality
- Library upload: 0.92 -> 0.97 starting quality
- Size limit: 10MB -> 20MB before compression kicks in
- Gentler quality steps: drops by 0.03 instead of 0.1
- Higher quality floor: 0.50 instead of 0.30
- Gentler downscaling: 0.85x instead of 0.8x per step

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-07 05:03:23 -06:00
parent 0f1a4f82a9
commit c4a6239f46

View File

@@ -509,7 +509,7 @@ async function takePhoto() {
setTimeout(() => flash.classList.remove('flash'), 150); setTimeout(() => flash.classList.remove('flash'), 150);
const blob = await new Promise((resolve, reject) => { const blob = await new Promise((resolve, reject) => {
canvas.toBlob(b => b ? resolve(b) : reject(new Error('Canvas capture failed')), 'image/jpeg', 0.92); canvas.toBlob(b => b ? resolve(b) : reject(new Error('Canvas capture failed')), 'image/jpeg', 0.97);
}); });
await savePhoto(blob); await savePhoto(blob);
@@ -571,7 +571,7 @@ async function savePhoto(jpegBlob) {
} }
} }
const MAX_UPLOAD_BYTES = 10 * 1024 * 1024; const MAX_UPLOAD_BYTES = 20 * 1024 * 1024;
function convertToJPEG(file) { function convertToJPEG(file) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -579,7 +579,7 @@ function convertToJPEG(file) {
reader.onload = (e) => { reader.onload = (e) => {
const img = new Image(); const img = new Image();
img.onload = () => { img.onload = () => {
let quality = 0.92; let quality = 0.97;
let scale = 1.0; let scale = 1.0;
const attempt = () => { const attempt = () => {
@@ -593,14 +593,14 @@ function convertToJPEG(file) {
reject(new Error('Failed to convert')); reject(new Error('Failed to convert'));
return; return;
} }
if (blob.size <= MAX_UPLOAD_BYTES || quality <= 0.3) { if (blob.size <= MAX_UPLOAD_BYTES || quality <= 0.5) {
resolve(blob); resolve(blob);
} else { } else {
if (quality > 0.5) { if (quality > 0.85) {
quality -= 0.1; quality -= 0.03;
} else { } else {
scale *= 0.8; scale *= 0.85;
quality = 0.7; quality = 0.92;
} }
attempt(); attempt();
} }