@@ -44,6 +44,8 @@ async function setFile(_file, _scaleMagnifyingGlass = false, _renderType = 'canv
4444 if ( renderImages )
4545 revokeAllObjectURL ( ) ;
4646
47+ createObserver ( ) ;
48+
4749 return ;
4850}
4951
@@ -495,24 +497,23 @@ async function render(index, _scale = false, magnifyingGlass = false)
495497 {
496498 console . error ( error ) ;
497499
498- img . src = app . encodeSrcURI ( app . shortWindowsPath ( src , true ) ) ;
499- img . classList . remove ( 'blobRendered' , 'blobRender' ) ;
500- img . style . imageRendering = '' ;
500+ await srcToImage ( src , img )
501501 }
502502 }
503503 else
504504 {
505- img . src = app . encodeSrcURI ( app . shortWindowsPath ( src , true ) ) ;
506- img . classList . remove ( 'blobRendered' , 'blobRender' ) ;
507- img . style . imageRendering = '' ;
505+ await srcToImage ( src , img )
508506 }
509507 }
510508 else
511509 {
512- img . src = app . encodeSrcURI ( app . shortWindowsPath ( src , true ) ) ;
513- img . classList . remove ( 'blobRendered' , 'blobRender' ) ;
514- img . style . imageRendering = '' ;
510+ await srcToImage ( src , img )
515511 }
512+
513+ if ( ( onRender && onRender . num > 0 ) || _scale )
514+ await decodeImage ( img , true ) ;
515+ else
516+ decodeImage ( img , false ) ;
516517 }
517518
518519 if ( onRender )
@@ -542,6 +543,93 @@ async function render(index, _scale = false, magnifyingGlass = false)
542543 return ;
543544}
544545
546+ async function srcToImage ( src , img )
547+ {
548+ img . src = app . encodeSrcURI ( app . shortWindowsPath ( src , true ) ) ;
549+ img . classList . remove ( 'blobRendered' , 'blobRender' ) ;
550+ img . style . imageRendering = '' ;
551+
552+ return true ;
553+ }
554+
555+ async function decodeImage ( img , sync = false )
556+ {
557+ if ( sync )
558+ {
559+ try
560+ {
561+ await img . decode ( ) ;
562+ }
563+ catch ( e ) { }
564+ }
565+
566+ observer . observe ( img ) ;
567+ }
568+
569+ var observer = false ;
570+
571+ function createObserver ( )
572+ {
573+ if ( observer )
574+ observer . disconnect ( ) ;
575+
576+ observer = new IntersectionObserver ( function ( entries ) {
577+
578+ for ( let i = 0 , len = entries . length ; i < len ; i ++ )
579+ {
580+ const entry = entries [ i ] ;
581+
582+ if ( entry . isIntersecting || entry . intersectionRatio > 0 )
583+ {
584+ try
585+ {
586+ entry . target . decode ( ) ;
587+ }
588+ catch ( e ) { }
589+ }
590+ }
591+
592+ } , {
593+ root : template . _contentRight ( ) . firstElementChild ,
594+ rootMargin : '4000px' ,
595+ threshold : 0 ,
596+ } ) ;
597+ }
598+
599+ /*function removeDecodeImageInCanvas(img, ocImg)
600+ {
601+ const canvas = ocImg.querySelector('canvas');
602+ if(canvas) canvas.remove();
603+
604+ img.style.display = '';
605+ }
606+
607+ async function decodeImageInCanvas(src, img, ocImg)
608+ {
609+ console.log(src);
610+
611+ const response = await fetch(app.shortWindowsPath(src, true));
612+ const buffer = await response.blob();
613+ const bitmap = await createImageBitmap(buffer);
614+
615+ let canvas = ocImg.querySelector('canvas');
616+
617+ if(!canvas)
618+ {
619+ canvas = document.createElement('canvas');
620+ canvas.className = 'originalSize imageInCanvas';
621+ canvas.width = bitmap.width;
622+ canvas.height = bitmap.height;
623+ ocImg.prepend(canvas);
624+ img.style.display = 'none';
625+ }
626+
627+ const ctx = canvas.getContext('2d');
628+ ctx.drawImage(bitmap, 0, 0);
629+
630+ return true;
631+ }*/
632+
545633module . exports = {
546634 setFile : setFile ,
547635 reset : reset ,
0 commit comments