Support bold font

This commit is contained in:
the1812 2019-01-24 13:35:33 +08:00
parent 676e232051
commit f254bf46ed
6 changed files with 15 additions and 12 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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)}}})}}}}})();

View File

@ -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)

View File

@ -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()], {