您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
canvas
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/39257/256894/bv7_canvas_b.js
// ==UserScript== // @name bv7_canvas_b // @namespace bv7 // @version 0.2 // @description canvas // @author bv7 // @include file:///D:/projects/JSProjects/bv7bbc/bv7_bbc_dark/bv_dev_canvas*.html // @require https://gf.qytechs.cn/scripts/38665-bv7-jpeg2array-b/code/bv7_jpeg2array_b.user.js // @run-at document-idle // @grant GM_xmlhttpRequest // ==/UserScript== class Canvas { constructor() { this.domCanvas = document.createElement('canvas'); } set width(v) { this.domCanvas.width = v; this.onresize(); } set height(v) { this.domCanvas.height = v; this.onresize(); } get width () { return this.domCanvas.width; } get height() { return this.domCanvas.height; } onresize() { } getContext(_id) { switch (_id) { case '2d': this.context = new class { constructor(canvas) { this.canvas = canvas; this.domContext = this.canvas.domCanvas.getContext('2d'); this.imageData = this.domContext.getImageData(0, 0, this.canvas.domCanvas.width, this.canvas.domCanvas.height); } drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight, then) { let myImage; let draw = () => { if (dWidth && sWidth && dHeight && sHeight) { let syStep = sHeight / dHeight; let sxStep = sWidth / dWidth; let dyStep = dHeight / sHeight; let dxStep = dWidth / sWidth ; let syStart = Math.max(0, sy, sy - dy / dyStep); let sxStart = Math.max(0, sx, sx - dx / dxStep); let syEnd = Math.min(myImage.height, sy + sHeight, sy + (this.imageData.height - dy) / dyStep); let sxEnd = Math.min(myImage.width , sx + sWidth , sx + (this.imageData.width - dx) / dxStep); let dyStart = dy + (syStart - sy) * dyStep; let dxStart = dx + (sxStart - sx) * dxStep; let dyEnd = dy + (syEnd - sy) * dyStep; let dxEnd = dx + (sxEnd - sx) * dxStep; let sh1 = Math.max(1, syStep); let sw1 = Math.max(1, sxStep); let dh1 = Math.max(1, dyStep); let dw1 = Math.max(1, dxStep); let siPerLine, siStartLine, siStart; let diPerLine, diStartLine, diStart; let sy1, sy1Next, sy2Start, sy2End; let sx1, sx1Next, sx2Start, sx2End; let dy1, dy1Next, dy2Start, dy2End; let dx1, dx1Next, dx2Start, dx2End; let s2count; let r, g, b, a; siPerLine = myImage.imageData.width * 4; diPerLine = this.imageData.width * 4; sy2Start = Math.round(sy1 = syStart); dy2Start = Math.round(dy1 = dyStart); while (sy1 < syEnd) { sy2End = Math.round(sy1Next = sy1 + sh1); dy2End = Math.round(dy1Next = dy1 + dh1); sx2Start = Math.round(sx1 = sxStart); dx2Start = Math.round(dx1 = dxStart); siStartLine = sy2Start * siPerLine; diStartLine = dy2Start * diPerLine; while (sx1 < sxEnd) { sx2End = Math.round(sx1Next = sx1 + sw1); dx2End = Math.round(dx1Next = dx1 + dw1); siStart = siStartLine + sx2Start * 4; diStart = diStartLine + dx2Start * 4; s2count = (sy2End - sy2Start) * (sx2End - sx2Start); r = g = b = a = 0; for (let sy2 = sy2Start; sy2 < sy2End; sy2++, siStart += siPerLine) for (let sx2 = sx2Start, si = siStart; sx2 < sx2End; sx2++) { r += myImage.imageData.data[si++]; g += myImage.imageData.data[si++]; b += myImage.imageData.data[si++]; a += myImage.imageData.data[si++]; } for (let dy2 = dy2Start; dy2 < dy2End; dy2++, diStart += diPerLine) for (let dx2 = dx2Start, di = diStart; dx2 < dx2End; dx2++) { this.imageData.data[di++] = (r - r % s2count) / s2count; this.imageData.data[di++] = (g - g % s2count) / s2count; this.imageData.data[di++] = (b - b % s2count) / s2count; this.imageData.data[di++] = (a - a % s2count) / s2count; } sx1 = sx1Next; dx1 = dx1Next; sx2Start = sx2End; dx2Start = dx2End; } sy1 = sy1Next; dy1 = dy1Next; sy2Start = sy2End; dy2Start = dy2End; } this.domContext.putImageData(this.imageData, 0, 0); } if (then) then(); }; if (Canvas.images.some((v) => (myImage = v).src == image.src)) draw(); else { myImage = new JpegImage(); myImage.onload = () => { //let t = new Date(); myImage.imageData = this.domContext.createImageData(myImage.width, myImage.height); myImage.copyToImageData(myImage.imageData); Canvas.images.push(myImage); draw(); //console.log((new Date()) - t); }; myImage.src = image.src; } }; } (this); break; } return this.context; } toDataUrl(type = 'image/png', encoderOptions = 0.92) { } } Canvas.images = []; /* let canvas = new Canvas(); canvas.width = 500; canvas.height = 500; canvas.getContext('2d').drawImage(document.getElementById('img1'), -20, 20, 600, 500, 20, -10, 300, 400); document.body.appendChild(canvas.domCanvas); */
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址