显卡完善

This commit is contained in:
1 2025-07-23 17:03:15 +08:00
parent c470b9074e
commit a59b923ed1

View File

@ -1070,8 +1070,11 @@ export default {
zone.fontColor = item.txt.col || 0; // zone.fontColor = item.txt.col || 0; //
zone.fontBold = item.txt.fW || 0; // zone.fontBold = item.txt.fW || 0; //
zone.fontStretch = item.txt.stch || 0; // zone.fontStretch = item.txt.stch || 0; //
zone.hAlign = typeof item.txt.hPos === 'number' ? Math.max(item.txt.hPos - 1, 0) : 1; // //
zone.vAlign = typeof item.txt.vPos === 'number' ? Math.max(item.txt.vPos - 1, 0) : 1; // console.log('编辑节目item.txt.hPos:', item.txt.hPos, 'item.txt.vPos:', item.txt.vPos);
zone.hAlign = typeof item.txt.hPos === 'number' ? (item.txt.hPos + 1) : 0; // 123
zone.vAlign = typeof item.txt.vPos === 'number' ? (item.txt.vPos + 1) : 0; // 123
console.log('zone.hAlign:', zone.hAlign, 'zone.vAlign:', zone.vAlign);
} else if (item.typ === 1 && item.img) { } else if (item.typ === 1 && item.img) {
// //
zone.playType = 1; zone.playType = 1;
@ -2362,8 +2365,8 @@ export default {
fEn: zone.fontEn + 1, // fEn: zone.fontEn + 1, //
fW: zone.fontBold, // fW: zone.fontBold, //
stch: zone.fontStretch, // stch: zone.fontStretch, //
hPos: zone.hAlign - 1, // hPos: zone.hAlign + 1, // 123
vPos: zone.vAlign - 1 // vPos: zone.vAlign + 1 // 123
} }
}; };
area.pLst.push(textItem); area.pLst.push(textItem);
@ -2506,13 +2509,19 @@ export default {
ctx.fillStyle = colors[zone.fontColor] || '#000000'; ctx.fillStyle = colors[zone.fontColor] || '#000000';
ctx.textBaseline = 'top'; ctx.textBaseline = 'top';
// zone.fontEn // zone.fontEn
let fontFamily = ['SimSun', 'SimHei', 'KaiTi'][zone.font] || 'SimSun'; const fontFamilies = [
if (zone.fontEn !== undefined && zone.fontEn !== null) { 'SimSun, 宋体, Songti SC, serif',
// 'SimHei, 黑体, Heiti SC, sans-serif',
'KaiTi, 楷体, Kaiti SC, serif'
];
const enFontMap = [ const enFontMap = [
'Courier New', 'Arial Black', 'Arial Italic', 'Lucida Console', 'Impact', 'Gothic', 'Arial Narrow', 'Comic Sans MS', 'Brush Script MT', 'Century Gothic', 'Times New Roman' 'Courier New', 'Arial Black', 'Arial Italic', 'Lucida Console', 'Impact', 'Gothic', 'Arial Narrow', 'Comic Sans MS', 'Brush Script MT', 'Century Gothic', 'Times New Roman'
]; ];
fontFamily = enFontMap[zone.fontEn] || fontFamily; let fontFamily;
if (/^[A-Za-z0-9\s]+$/.test(zone.displayText)) {
fontFamily = enFontMap[zone.fontEn] || fontFamilies[0];
} else {
fontFamily = fontFamilies[zone.font] || fontFamilies[0];
} }
ctx.font = `${asset.fontWeight} ${asset.scaledFontSize}px ${fontFamily}`; ctx.font = `${asset.fontWeight} ${asset.scaledFontSize}px ${fontFamily}`;
@ -2528,6 +2537,8 @@ export default {
startY = zoneY + (zoneHeight - totalHeight) / 2; startY = zoneY + (zoneHeight - totalHeight) / 2;
} else if (verticalAlign === 2) { // } else if (verticalAlign === 2) { //
startY = zoneY + zoneHeight - totalHeight; startY = zoneY + zoneHeight - totalHeight;
} else { //
startY = zoneY;
} }
// //
@ -2540,6 +2551,8 @@ export default {
startX = zoneX + (zoneWidth - textWidth) / 2; startX = zoneX + (zoneWidth - textWidth) / 2;
} else if (zone.hAlign === 2) { // } else if (zone.hAlign === 2) { //
startX = zoneX + zoneWidth - textWidth; startX = zoneX + zoneWidth - textWidth;
} else { //
startX = zoneX;
} }
// //
@ -2675,13 +2688,31 @@ export default {
// //
const scaledFontSize = Math.max(10, Math.round(fontSize * scale * 0.8)); // 0.8 const scaledFontSize = Math.max(10, Math.round(fontSize * scale * 0.8)); // 0.8
const fontFamily = ['SimSun', 'SimHei', 'KaiTi'][zone.font] || 'SimSun'; const fontFamily = [
'SimSun, 宋体, Songti SC, serif',
'SimHei, 黑体, Heiti SC, sans-serif',
'KaiTi, 楷体, Kaiti SC, serif'
];
const fontWeight = zone.fontBold ? 'bold' : 'normal'; const fontWeight = zone.fontBold ? 'bold' : 'normal';
// canvas // canvas
const measureCanvas = document.createElement('canvas'); const measureCanvas = document.createElement('canvas');
const measureCtx = measureCanvas.getContext('2d'); const measureCtx = measureCanvas.getContext('2d');
measureCtx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily}`; const fontFamilies2 = [
'SimSun, 宋体, Songti SC, serif',
'SimHei, 黑体, Heiti SC, sans-serif',
'KaiTi, 楷体, Kaiti SC, serif'
];
const enFontMap2 = [
'Courier New', 'Arial Black', 'Arial Italic', 'Lucida Console', 'Impact', 'Gothic', 'Arial Narrow', 'Comic Sans MS', 'Brush Script MT', 'Century Gothic', 'Times New Roman'
];
let fontFamily2;
if (/^[A-Za-z0-9\s]+$/.test(zone.displayText)) {
fontFamily2 = enFontMap2[zone.fontEn] || fontFamilies2[0];
} else {
fontFamily2 = fontFamilies2[zone.font] || fontFamilies2[0];
}
measureCtx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily2}`;
// //
const zoneRenderWidth = swapWH ? zone.height : zone.width; const zoneRenderWidth = swapWH ? zone.height : zone.width;
@ -2720,7 +2751,7 @@ export default {
pages, pages,
isText: true, isText: true,
scaledFontSize, scaledFontSize,
fontFamily, fontFamily: fontFamily2,
fontWeight, fontWeight,
lineHeight lineHeight
}; };
@ -2765,9 +2796,13 @@ export default {
const scale = Math.min(canvasW / screenW, canvasH / screenH); const scale = Math.min(canvasW / screenW, canvasH / screenH);
let fontSize = parseInt(this.addProgramFontSizes[zone.fontSize] || '16px'); let fontSize = parseInt(this.addProgramFontSizes[zone.fontSize] || '16px');
let scaledFontSize = Math.max(10, Math.round(fontSize * scale)); let scaledFontSize = Math.max(10, Math.round(fontSize * scale));
const fontFamily = ['SimSun', 'SimHei', 'KaiTi'][zone.font] || 'SimSun'; const fontFamily = [
'SimSun, 宋体, Songti SC, serif',
'SimHei, 黑体, Heiti SC, sans-serif',
'KaiTi, 楷体, Kaiti SC, serif'
];
const fontWeight = zone.fontBold ? 'bold' : 'normal'; const fontWeight = zone.fontBold ? 'bold' : 'normal';
ctx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily}`; ctx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily[zone.font]}`;
let lines = []; let lines = [];
let text = zone.displayText; let text = zone.displayText;
let zw = zone.width * scale; let zw = zone.width * scale;