feat: ComfyUI 改走 10.60.74.221,测试页上传图超阈值自动降采样
将 worker 默认 ComfyUI 地址改为远端 10.60.74.221:8188;前端测试页在像素超过 1536000 时等比缩小到 786432 以内。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
// 上传图片自动降采样:当总像素 > MAX_PIXELS 时,等比例缩小到 <= TARGET_PIXELS。
|
||||
// 用法:在提交前 file = await window.downscaleImageFile(file);
|
||||
(function () {
|
||||
var MAX_PIXELS = 1536000; // 触发阈值:超过则缩小
|
||||
var TARGET_PIXELS = 786432; // 缩小后总像素上限
|
||||
|
||||
function loadImage(url) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var img = new Image();
|
||||
img.onload = function () { resolve(img); };
|
||||
img.onerror = reject;
|
||||
img.src = url;
|
||||
});
|
||||
}
|
||||
|
||||
async function downscaleImageFile(file) {
|
||||
// 非图片、GIF、SVG 不处理,原样返回
|
||||
if (!file || !file.type || file.type.indexOf('image/') !== 0) return file;
|
||||
if (file.type === 'image/gif' || file.type === 'image/svg+xml') return file;
|
||||
|
||||
var url = URL.createObjectURL(file);
|
||||
try {
|
||||
var img = await loadImage(url);
|
||||
var w = img.naturalWidth, h = img.naturalHeight;
|
||||
var total = w * h;
|
||||
if (!total || total <= MAX_PIXELS) return file; // 未超阈值,原图直接用
|
||||
|
||||
var scale = Math.sqrt(TARGET_PIXELS / total);
|
||||
var nw = Math.max(1, Math.round(w * scale));
|
||||
var nh = Math.max(1, Math.round(h * scale));
|
||||
|
||||
var canvas = document.createElement('canvas');
|
||||
canvas.width = nw;
|
||||
canvas.height = nh;
|
||||
var ctx = canvas.getContext('2d');
|
||||
ctx.drawImage(img, 0, 0, nw, nh);
|
||||
|
||||
var outType = file.type === 'image/png' ? 'image/png' : 'image/jpeg';
|
||||
var quality = outType === 'image/jpeg' ? 0.92 : undefined;
|
||||
var blob = await new Promise(function (res) { canvas.toBlob(res, outType, quality); });
|
||||
if (!blob) return file;
|
||||
|
||||
var base = (file.name || 'image').replace(/\.(jpe?g|png|webp|bmp)$/i, '');
|
||||
var name = base + (outType === 'image/png' ? '.png' : '.jpg');
|
||||
return new File([blob], name, { type: outType, lastModified: Date.now() });
|
||||
} catch (e) {
|
||||
console.warn('downscaleImageFile 失败,使用原图', e);
|
||||
return file;
|
||||
} finally {
|
||||
URL.revokeObjectURL(url);
|
||||
}
|
||||
}
|
||||
|
||||
window.downscaleImageFile = downscaleImageFile;
|
||||
})();
|
||||
Reference in New Issue
Block a user