mirror of
https://gitee.com/ulthon/ulthon_information.git
synced 2026-07-08 21:12:48 +08:00
feat(phoneimage): 接入渲染管线逐页进度日志
This commit is contained in:
@@ -177,10 +177,12 @@ var PhoneImageEngine = (function () {
|
|||||||
// 防止并发渲染
|
// 防止并发渲染
|
||||||
if (render._locked) {
|
if (render._locked) {
|
||||||
// 标记有待处理的渲染请求,当前渲染完成后会自动重试
|
// 标记有待处理的渲染请求,当前渲染完成后会自动重试
|
||||||
|
PhoneImageLogPanel.log('渲染进行中,跳过本次请求', 'warn');
|
||||||
render._pending = true;
|
render._pending = true;
|
||||||
return deferred.reject('rendering').promise();
|
return deferred.reject('rendering').promise();
|
||||||
}
|
}
|
||||||
render._locked = true;
|
render._locked = true;
|
||||||
|
PhoneImageLogPanel.log('开始渲染...', 'info');
|
||||||
|
|
||||||
pages = [];
|
pages = [];
|
||||||
var sizeConfig = config.sizes[config.size] || config.sizes.xiaohongshu;
|
var sizeConfig = config.sizes[config.size] || config.sizes.xiaohongshu;
|
||||||
@@ -189,12 +191,15 @@ var PhoneImageEngine = (function () {
|
|||||||
|
|
||||||
// 从预览区读取已预处理的内容
|
// 从预览区读取已预处理的内容
|
||||||
syncPreview();
|
syncPreview();
|
||||||
|
PhoneImageLogPanel.log('同步预览区内容', 'info');
|
||||||
var previewEl = document.getElementById('render-preview');
|
var previewEl = document.getElementById('render-preview');
|
||||||
|
|
||||||
// 等待预览区内所有图片加载完成,否则 getBoundingClientRect 测高为0
|
// 等待预览区内所有图片加载完成,否则 getBoundingClientRect 测高为0
|
||||||
|
PhoneImageLogPanel.log('等待图片加载...', 'info');
|
||||||
waitForImages(previewEl).then(function () {
|
waitForImages(previewEl).then(function () {
|
||||||
var cleanHtml = previewEl ? previewEl.innerHTML : '';
|
var cleanHtml = previewEl ? previewEl.innerHTML : '';
|
||||||
var blocks = parseHtmlToBlocks(cleanHtml);
|
var blocks = parseHtmlToBlocks(cleanHtml);
|
||||||
|
PhoneImageLogPanel.log('解析内容: ' + blocks.length + ' 个块', 'info');
|
||||||
|
|
||||||
// 空内容检测
|
// 空内容检测
|
||||||
if (blocks.length === 0) {
|
if (blocks.length === 0) {
|
||||||
@@ -205,13 +210,16 @@ var PhoneImageEngine = (function () {
|
|||||||
|
|
||||||
// 封面页
|
// 封面页
|
||||||
pages.push(generateCoverPage(sizeConfig));
|
pages.push(generateCoverPage(sizeConfig));
|
||||||
|
PhoneImageLogPanel.log('生成封面页', 'info');
|
||||||
|
|
||||||
// 内容分页
|
// 内容分页
|
||||||
|
PhoneImageLogPanel.log('分页计算中...', 'info');
|
||||||
captureEditorBlocks(cleanHtml, blocks, contentAreaHeight, sizeConfig).then(function(contentPages) {
|
captureEditorBlocks(cleanHtml, blocks, contentAreaHeight, sizeConfig).then(function(contentPages) {
|
||||||
pages = pages.concat(contentPages);
|
pages = pages.concat(contentPages);
|
||||||
|
|
||||||
// 尾页
|
// 尾页
|
||||||
pages.push(generateSummaryPage(sizeConfig, pages.length));
|
pages.push(generateSummaryPage(sizeConfig, pages.length));
|
||||||
|
PhoneImageLogPanel.log('生成尾页', 'info');
|
||||||
|
|
||||||
// 页码 N/M
|
// 页码 N/M
|
||||||
var totalPages = pages.length;
|
var totalPages = pages.length;
|
||||||
@@ -226,6 +234,7 @@ var PhoneImageEngine = (function () {
|
|||||||
|
|
||||||
// 渲染缩略图
|
// 渲染缩略图
|
||||||
renderThumbnails(sizeConfig).then(function() {
|
renderThumbnails(sizeConfig).then(function() {
|
||||||
|
PhoneImageLogPanel.log('渲染完成,共 ' + pages.length + ' 页', 'success');
|
||||||
render._locked = false;
|
render._locked = false;
|
||||||
if (render._pending) {
|
if (render._pending) {
|
||||||
render._pending = false;
|
render._pending = false;
|
||||||
@@ -233,10 +242,12 @@ var PhoneImageEngine = (function () {
|
|||||||
}
|
}
|
||||||
deferred.resolve(pages);
|
deferred.resolve(pages);
|
||||||
}).catch(function(err) {
|
}).catch(function(err) {
|
||||||
|
PhoneImageLogPanel.log('渲染失败: ' + err, 'error');
|
||||||
render._locked = false;
|
render._locked = false;
|
||||||
deferred.reject(err);
|
deferred.reject(err);
|
||||||
});
|
});
|
||||||
}).catch(function(err) {
|
}).catch(function(err) {
|
||||||
|
PhoneImageLogPanel.log('分页计算失败: ' + err, 'error');
|
||||||
render._locked = false;
|
render._locked = false;
|
||||||
deferred.reject(err);
|
deferred.reject(err);
|
||||||
});
|
});
|
||||||
@@ -1034,7 +1045,7 @@ var PhoneImageEngine = (function () {
|
|||||||
* sizeConfig: 尺寸配置(用于纯图片页canvas渲染)
|
* sizeConfig: 尺寸配置(用于纯图片页canvas渲染)
|
||||||
* @returns {jQuery Deferred} resolves with array of dataURL strings or canvas objects
|
* @returns {jQuery Deferred} resolves with array of dataURL strings or canvas objects
|
||||||
*/
|
*/
|
||||||
function doCapturePages(opts) {
|
function doCapturePages(opts, pageProgressCallback) {
|
||||||
var deferred = $.Deferred();
|
var deferred = $.Deferred();
|
||||||
ensureStaging();
|
ensureStaging();
|
||||||
|
|
||||||
@@ -1061,7 +1072,7 @@ var PhoneImageEngine = (function () {
|
|||||||
// html2canvas会跳过visibility:hidden的元素,临时切换为可见
|
// html2canvas会跳过visibility:hidden的元素,临时切换为可见
|
||||||
$staging.css({ visibility: 'visible' });
|
$staging.css({ visibility: 'visible' });
|
||||||
// 表格和代码块已在中间栏中转为图片,无需再次转换
|
// 表格和代码块已在中间栏中转为图片,无需再次转换
|
||||||
runCaptureLoop($staging, opts, deferred);
|
runCaptureLoop($staging, opts, deferred, pageProgressCallback);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1074,7 +1085,7 @@ var PhoneImageEngine = (function () {
|
|||||||
* @param {Object} opts - 截图选项
|
* @param {Object} opts - 截图选项
|
||||||
* @param {jQuery Deferred} deferred - 外部deferred
|
* @param {jQuery Deferred} deferred - 外部deferred
|
||||||
*/
|
*/
|
||||||
function runCaptureLoop($staging, opts, deferred) {
|
function runCaptureLoop($staging, opts, deferred, pageProgressCallback) {
|
||||||
var $pageElems = $staging.find('.phone-image-page');
|
var $pageElems = $staging.find('.phone-image-page');
|
||||||
if ($pageElems.length === 0) {
|
if ($pageElems.length === 0) {
|
||||||
$staging.css({ visibility: 'hidden' });
|
$staging.css({ visibility: 'hidden' });
|
||||||
@@ -1108,16 +1119,18 @@ var PhoneImageEngine = (function () {
|
|||||||
// 保存模式: 高质量绘制原图到canvas
|
// 保存模式: 高质量绘制原图到canvas
|
||||||
renderPureImageToCanvas(pureSrc, opts.sizeConfig.width, opts.sizeConfig.height).then(function (canvas) {
|
renderPureImageToCanvas(pureSrc, opts.sizeConfig.width, opts.sizeConfig.height).then(function (canvas) {
|
||||||
results.push(canvas);
|
results.push(canvas);
|
||||||
|
if (pageProgressCallback) pageProgressCallback(idx + 1, total);
|
||||||
idx++;
|
idx++;
|
||||||
captureNext();
|
captureNext();
|
||||||
}).catch(function () {
|
}).catch(function () {
|
||||||
// 加载失败,回退到html2canvas
|
// 加载失败,回退到html2canvas
|
||||||
capturePageViaHtml2Canvas($elem, $staging, opts, results, deferred, function () { idx++; captureNext(); });
|
capturePageViaHtml2Canvas($elem, $staging, opts, results, deferred, function () { if (pageProgressCallback) pageProgressCallback(idx + 1, total); idx++; captureNext(); });
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// 缩略图模式: 直接用src
|
// 缩略图模式: 直接用src
|
||||||
results.push(pureSrc);
|
results.push(pureSrc);
|
||||||
|
if (pageProgressCallback) pageProgressCallback(idx + 1, total);
|
||||||
idx++;
|
idx++;
|
||||||
captureNext();
|
captureNext();
|
||||||
return;
|
return;
|
||||||
@@ -1169,6 +1182,8 @@ var PhoneImageEngine = (function () {
|
|||||||
outputCanvas: false,
|
outputCanvas: false,
|
||||||
quality: 0.85,
|
quality: 0.85,
|
||||||
sizeConfig: sizeConfig
|
sizeConfig: sizeConfig
|
||||||
|
}, function (current, total) {
|
||||||
|
PhoneImageLogPanel.log('截图: 第 ' + current + '/' + total + ' 页', 'info');
|
||||||
}).then(function (dataUrls) {
|
}).then(function (dataUrls) {
|
||||||
displayThumbnails(dataUrls, sizeConfig);
|
displayThumbnails(dataUrls, sizeConfig);
|
||||||
deferred.resolve(pages);
|
deferred.resolve(pages);
|
||||||
@@ -1574,6 +1589,7 @@ var PhoneImageEngine = (function () {
|
|||||||
syncPreview: syncPreview,
|
syncPreview: syncPreview,
|
||||||
setPageAlignment: setPageAlignment,
|
setPageAlignment: setPageAlignment,
|
||||||
exportLongImage: exportLongImage,
|
exportLongImage: exportLongImage,
|
||||||
|
logPanel: PhoneImageLogPanel,
|
||||||
getContentHtml: function () {
|
getContentHtml: function () {
|
||||||
if (window.phoneImageEditor) {
|
if (window.phoneImageEditor) {
|
||||||
return window.phoneImageEditor.getHtml();
|
return window.phoneImageEditor.getHtml();
|
||||||
|
|||||||
@@ -500,12 +500,9 @@
|
|||||||
$.extend(newConfig, extraConfig);
|
$.extend(newConfig, extraConfig);
|
||||||
}
|
}
|
||||||
PhoneImageEngine.updateConfig(newConfig);
|
PhoneImageEngine.updateConfig(newConfig);
|
||||||
var loadIdx = layer.load();
|
|
||||||
PhoneImageEngine.render().then(function (pages) {
|
PhoneImageEngine.render().then(function (pages) {
|
||||||
layer.close(loadIdx);
|
|
||||||
layer.msg('排版完成,共 ' + pages.length + ' 页');
|
layer.msg('排版完成,共 ' + pages.length + ' 页');
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
layer.close(loadIdx);
|
|
||||||
if (err !== 'rendering') {
|
if (err !== 'rendering') {
|
||||||
layer.msg('渲染失败: ' + err);
|
layer.msg('渲染失败: ' + err);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user