1010// @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存
1111// @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
1212// @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
13- // @version 2024.1.28 .1
13+ // @version 2024.2.2 .1
1414// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
1515// @namespace https://github.com/hoothin/UserScripts
1616// @homepage https://www.hoothin.com
@@ -11774,20 +11774,31 @@ ImgOps | https://imgops.com/#b#`;
1177411774 }
1177511775 } else GM_fetch = fetch;
1177611776
11777+ var canvas = document.createElement('CANVAS');
11778+ canvas.style.display = "none";
11779+ document.body.appendChild(canvas);
11780+ if (typeof canvas.getContext === 'undefined') {
11781+ document.body.removeChild(canvas);
11782+ canvas = null;
11783+ } else {
11784+ document.body.removeChild(canvas);
11785+ }
1177711786 function icon2Base64(icon, content, iconStyle) {
11778- if (!content) return false;
11779- var canvas = document.createElement("canvas");
11787+ if (!content || !canvas) return false;
1178011788 let size = Math.min((icon.clientWidth || icon.offsetWidth), (icon.clientHeight || icon.offsetHeight));
1178111789 if (!size) return false;
1178211790 canvas.width = size;
1178311791 canvas.height = size;
11792+ document.body.appendChild(canvas);
1178411793 var ctx = canvas.getContext("2d");
11794+ ctx.clearRect(0, 0, canvas.width, canvas.height);
1178511795 ctx.font = iconStyle.font || (iconStyle.fontSize + " " + iconStyle.fontFamily);
1178611796 ctx.strokeStyle = iconStyle.color || "black";
1178711797 ctx.fillStyle = iconStyle.color || "black";
1178811798 ctx.textBaseline = "top";
1178911799 let metrics = ctx.measureText(content);
1179011800 ctx.fillText(content, (canvas.width - metrics.width) / 2, (canvas.height - parseInt(iconStyle.fontSize)) / 2);
11801+ document.body.removeChild(canvas);
1179111802 return canvas.toDataURL("image/png");
1179211803 }
1179311804
@@ -11894,18 +11905,21 @@ ImgOps | https://imgops.com/#b#`;
1189411905 };
1189511906 function dataURLToCanvas(dataurl, cb){
1189611907 if(!dataurl)return cb(null);
11897- var canvas = document.createElement('CANVAS' );
11908+ document.body.appendChild(canvas );
1189811909 var ctx = canvas.getContext('2d');
1189911910 var img = new Image();
1190011911 img.setAttribute("crossOrigin","anonymous");
1190111912 img.onload = function(){
1190211913 canvas.width = img.width;
1190311914 canvas.height = img.height;
11915+ ctx.clearRect(0, 0, canvas.width, canvas.height);
1190411916 ctx.drawImage(img, 0, 0);
1190511917 cb(canvas);
11918+ document.body.removeChild(canvas);
1190611919 };
1190711920 img.onerror = function(){
1190811921 cb(null);
11922+ document.body.removeChild(canvas);
1190911923 };
1191011924 img.src = dataurl;
1191111925 }
@@ -11927,7 +11941,7 @@ ImgOps | https://imgops.com/#b#`;
1192711941 onload: function(d) {
1192811942 let blob = d.response;
1192911943 let ext = blob.type.replace(/.*image\/(\w+).*/, "$1");
11930- if (ext == "webp" || forcePng) {
11944+ if (canvas && ( ext == "webp" || forcePng) ) {
1193111945 var self = this;
1193211946 var a = new FileReader();
1193311947 a.readAsDataURL(blob);
@@ -14970,7 +14984,7 @@ ImgOps | https://imgops.com/#b#`;
1497014984 }
1497114985 });
1497214986 }
14973- if(/^data:/.test(imgSrc) || imgSrc.split("/")[2]== document.domain){
14987+ if(canvas && ( /^data:/.test(imgSrc) || imgSrc.split("/")[2] == document.domain) ){
1497414988 self.dataURLToCanvas(imgSrc, canvas=>{
1497514989 self.showTips("Downloading "+(downloaded+1)+"/"+len, 1000000);
1497614990 if(!canvas){
@@ -15402,18 +15416,21 @@ ImgOps | https://imgops.com/#b#`;
1540215416 },
1540315417 dataURLToCanvas:function (dataurl, cb){
1540415418 if(!dataurl)return cb(null);
15405- var canvas = document.createElement('CANVAS' );
15419+ document.body.appendChild(canvas );
1540615420 var ctx = canvas.getContext('2d');
1540715421 var img = new Image();
1540815422 img.setAttribute("crossOrigin","anonymous");
1540915423 img.onload = function(){
1541015424 canvas.width = img.width;
1541115425 canvas.height = img.height;
15426+ ctx.clearRect(0, 0, canvas.width, canvas.height);
1541215427 ctx.drawImage(img, 0, 0);
1541315428 cb(canvas);
15429+ document.body.removeChild(canvas);
1541415430 };
1541515431 img.onerror = function(){
1541615432 cb(null);
15433+ document.body.removeChild(canvas);
1541715434 };
1541815435 img.src = dataurl;
1541915436 },
@@ -24601,11 +24618,13 @@ ImgOps | https://imgops.com/#b#`;
2460124618 };
2460224619
2460324620 function drawTobase64(img){
24604- let canvas = document.createElement('CANVAS' );
24621+ document.body.appendChild(canvas );
2460524622 canvas.width = img.naturalWidth || img.width;
2460624623 canvas.height = img.naturalHeight || img.height;
2460724624 let ctx = canvas.getContext('2d');
24625+ ctx.clearRect(0, 0, canvas.width, canvas.height);
2460824626 ctx.drawImage(img, 0, 0);
24627+ document.body.removeChild(canvas);
2460924628 return canvas.toDataURL("image/png");
2461024629 }
2461124630
0 commit comments