diff --git a/docs/皱纹三视图标注说明-2026-10-15.md b/docs/皱纹三视图标注说明-2026-10-15.md index c378a2e..b0e5672 100644 --- a/docs/皱纹三视图标注说明-2026-10-15.md +++ b/docs/皱纹三视图标注说明-2026-10-15.md @@ -1,6 +1,6 @@ # 皱纹三视图标注 -- 报告皱纹页卡展示正面大图和两张侧脸缩略图,并保留各自标注。正面放大沿用缩略图的裁切;侧脸放大在缩略图的填充基础上缩小50%,再向下移动缩放后图片高度的50%。大图外框不动,顶部留白按确认效果保留,报告小图不变。 +- 报告皱纹页卡展示正面大图和两张侧脸缩略图,并保留各自标注。正面放大沿用缩略图的裁切;侧脸放大在缩略图的填充基础上缩小50%,净向下移动缩放后图片高度的25%(在之前下移50%的基础上先向上调20%,再向上调5%)。大图外框和报告小图不变。 - 每张照片只使用对应照片的皱纹增强图或真实标注坐标,不将正面标注投射到侧脸。 - 新检测优先复用三视图接口已提供的侧脸标注;缺失时分别以左右侧脸为主图补取,每侧最多调用一次。通常新增两次计费调用。 - 补取串行执行,每次前间隔 4 秒,每侧最多等待 20 秒;整个检测按 120 秒预算限制补取,给现有 150 秒前端超时预留余量。因此生成报告会增加等待时间。 diff --git a/h5/js/app.js b/h5/js/app.js index 33b4fb0..1f74006 100644 --- a/h5/js/app.js +++ b/h5/js/app.js @@ -1816,7 +1816,7 @@ var sideButton = e.target.closest('.contour-side-photo, .wrinkle-side-photo'); var img = sideButton ? sideButton.querySelector('img') : e.target.closest('.ditem-img'); if (img && img.src && !img.hidden && img.closest('.dpanel').classList.contains('active')) { - $('#zoom-img').src = reportZoomSource(img, sideButton || img.closest('.viz-frame'), sideButton ? .5 : 1, sideButton ? .5 : 0); + $('#zoom-img').src = reportZoomSource(img, sideButton || img.closest('.viz-frame'), sideButton ? .5 : 1, sideButton ? .25 : 0); openOverlay('p-zoom'); history.pushState({ screen: currentScreen, overlay: 'p-zoom' }, ''); } diff --git a/h5/test/zoom-fill.js b/h5/test/zoom-fill.js index 3254c6c..16f586f 100644 --- a/h5/test/zoom-fill.js +++ b/h5/test/zoom-fill.js @@ -19,5 +19,12 @@ assert.equal(context.reportZoomSource(img,frame,.5,.5),'cropped'); assert.equal(drawn[2][2]-drawn[1][2],drawn[1][4]*.5,'move down by exactly half the scaled photo height'); assert.equal(drawn[2][1],drawn[1][1]);assert.equal(drawn[2][3],drawn[1][3]);assert.equal(drawn[2][4],drawn[1][4]); assert.equal(canvases[2].height,canvases[1].height); +assert.equal(context.reportZoomSource(img,frame,.5,.3),'cropped'); +assert(Math.abs((drawn[2][2]-drawn[3][2])-drawn[1][4]*.2)<1e-9,'move fill upward 20% from previous 50% downward offset'); +assert.equal(canvases[3].height,canvases[2].height);assert.equal(drawn[3][3],drawn[2][3]); +assert.equal(context.reportZoomSource(img,frame,.5,.25),'cropped'); +assert(Math.abs((drawn[3][2]-drawn[4][2])-drawn[1][4]*.05)<1e-9,'move fill upward another 5%'); +assert.equal(drawn[4][3],drawn[3][3]);assert.equal(canvases[4].height,canvases[3].height); +assert(source.includes('sideButton ? .25 : 0'),'net downward offset is 25%'); assert(source.includes('sideButton ? .5 : 1'),'half-sized fill applies only to side-photo large previews'); -console.log('PASS side zoom fill: size halved, then moved down exactly 50% photo height; preview frame/front/small images unchanged'); +console.log('PASS side zoom fill: half size, shifted upward another5% to net downward25%; preview frame/front/small images unchanged');