mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Support bold font
This commit is contained in:
parent
676e232051
commit
f254bf46ed
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
min/danmaku-converter.min.js
vendored
2
min/danmaku-converter.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/download-danmaku.min.js
vendored
2
min/download-danmaku.min.js
vendored
@ -1 +1 @@
|
||||
(()=>{return(t,e)=>{const{DanmakuInfo:n}=e.import("videoInfo");const{DanmakuConverter:i}=e.import("danmakuConverter");async function o(t,e){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(e===true){await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=t=>{const e=parseFloat(document.querySelector(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};const e=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;const n=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));const l=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();const r=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(e)){if(document.querySelector(n).classList.contains("disabled")){t=t.concat(i)}}return t})();const c=[2,1.5,1,.75,.5][t(".bilibili-player-setting-fontsize .bui-thumb")];const s=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];const u=new i({title:o,font:e,alpha:n,duration:l,blockTypes:r,resolution:{x:1920*c,y:1080*c},bottomMarginPercent:s});const d=u.convertToAssDocument(a.rawXML);return new Blob([d.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(t);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${e?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n <button\n class="gui-settings-flat-button"\n id="download-danmaku">\n <i class="icon-danmaku"></i>\n <span>下载弹幕</span>\n <a id="danmaku-link" style="display:none"></a>\n </button>`,condition:async()=>{let t=await SpinQuery.condition(()=>(unsafeWindow||window).cid,t=>t!==undefined);return t!==undefined},success:()=>{const t=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",e=>{if(e.target!==t){const t=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);try{o(t,e.shiftKey)}catch(t){logError(t)}}})}}}}})();
|
||||
(()=>{return(t,e)=>{const{DanmakuInfo:n}=e.import("videoInfo");const{DanmakuConverter:i}=e.import("danmakuConverter");async function o(t,e){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(e===true){await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=t=>{const e=parseFloat(document.querySelector(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};const e=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;const n=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));const l=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();const r=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(e)){if(document.querySelector(n).classList.contains("disabled")){t=t.concat(i)}}return t})();const c=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];const s=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];const u=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked;const d=new i({title:o,font:e,alpha:n,duration:l,blockTypes:r,resolution:{x:1920*c,y:1080*c},bottomMarginPercent:s,bold:u});const b=d.convertToAssDocument(a.rawXML);return new Blob([b.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(t);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${e?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n <button\n class="gui-settings-flat-button"\n id="download-danmaku">\n <i class="icon-danmaku"></i>\n <span>下载弹幕</span>\n <a id="danmaku-link" style="display:none"></a>\n </button>`,condition:async()=>{let t=await SpinQuery.condition(()=>(unsafeWindow||window).cid,t=>t!==undefined);return t!==undefined},success:()=>{const t=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",e=>{if(e.target!==t){const t=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);try{o(t,e.shiftKey)}catch(t){logError(t)}}})}}}}})();
|
||||
@ -269,7 +269,7 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
||||
}
|
||||
class DanmakuConverter
|
||||
{
|
||||
constructor({ title, font, alpha, duration, blockTypes, resolution, bottomMarginPercent })
|
||||
constructor({ title, font, alpha, duration, blockTypes, resolution, bottomMarginPercent, bold })
|
||||
{
|
||||
this.title = title;
|
||||
this.font = font;
|
||||
@ -277,14 +277,15 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
||||
this.duration = duration;
|
||||
this.blockTypes = blockTypes;
|
||||
this.resolution = resolution;
|
||||
this.bold = bold;
|
||||
this.white = 16777215; // Dec color of white danmaku
|
||||
this.danmakuStack = new DanmakuStack(font, resolution, duration, bottomMarginPercent);
|
||||
}
|
||||
get fontStyles()
|
||||
{
|
||||
return {
|
||||
25: `Style: Medium,${this.font},52,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,0,0,0,0,100,100,0,0,1,1,0,5,0,0,0,0`,
|
||||
18: `Style: Small,${this.font},36,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,0,0,0,0,100,100,0,0,1,1,0,5,0,0,0,0`,
|
||||
25: `Style: Medium,${this.font},52,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,${this.bold ? "1" : "0"},0,0,0,100,100,0,0,1,1.2,0,5,0,0,0,0`,
|
||||
18: `Style: Small,${this.font},36,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,${this.bold ? "1" : "0"},0,0,0,100,100,0,0,1,1.2,0,5,0,0,0,0`,
|
||||
};
|
||||
}
|
||||
convertToAssDocument(xml)
|
||||
|
||||
@ -65,8 +65,9 @@
|
||||
}
|
||||
return result;
|
||||
})();
|
||||
const resolutionFactor = [2, 1.5, 1, 0.75, 0.5][getSliderIndex(".bilibili-player-setting-fontsize .bui-thumb")]; // 改变分辨率来调整字体大小
|
||||
const resolutionFactor = [1.4, 1.2, 1, 0.8, 0.6][getSliderIndex(".bilibili-player-setting-fontsize .bui-thumb")]; // 改变分辨率来调整字体大小
|
||||
const bottomMarginPercent = [0.75, 0.5, 0.25, 0.15, 0.15][getSliderIndex(".bilibili-player-setting-area .bui-thumb")];
|
||||
const bold = document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked;
|
||||
const converter = new DanmakuConverter({
|
||||
title,
|
||||
font,
|
||||
@ -78,6 +79,7 @@
|
||||
y: 1080 * resolutionFactor,
|
||||
},
|
||||
bottomMarginPercent,
|
||||
bold
|
||||
});
|
||||
const assDocument = converter.convertToAssDocument(danmaku.rawXML);
|
||||
return new Blob([assDocument.generateAss()], {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user