11import { matchHistogramsRGB , matchHistogramsColorspaces , COLOR_SPACE } from './histogram-utils.js' ;
2- import { writeArrayBuffer } from 'geotiff'
2+ import { fromArrayBuffer , fromBlob , writeArrayBuffer } from 'geotiff'
33
44/**
5- * Check if file is GeoTIFF
5+ * Check if file is TIFF
66 * @param {File|string } fileOrUrl - File object or data URL
7- * @returns {boolean } True if GeoTIFF
7+ * @returns {boolean } True if TIFF
88 */
9- function isGeoTIFF ( fileOrUrl ) {
9+ function isTIFF ( fileOrUrl ) {
1010 return ( typeof fileOrUrl !== "string" && fileOrUrl . type === "image/tiff" ) ||
1111 ( typeof fileOrUrl === "string" && fileOrUrl . startsWith ( "data:image/tiff;base64," ) ) ;
1212}
@@ -26,7 +26,7 @@ const DEFAULT_SETTINGS = {
2626 */
2727async function loadImage ( fileOrUrl , slot , settings = DEFAULT_SETTINGS ) {
2828 try {
29- if ( isGeoTIFF ( fileOrUrl ) ) {
29+ if ( isTIFF ( fileOrUrl ) ) {
3030 await loadGeoTIFF ( fileOrUrl , slot , settings ) ;
3131 } else {
3232 await loadRegularImage ( fileOrUrl , slot , settings ) ;
@@ -54,8 +54,9 @@ async function loadRegularImage(fileOrUrl, slot, settings=DEFAULT_SETTINGS) {
5454 canvas . height = img . naturalHeight ;
5555 const ctx = canvas . getContext ( "2d" ) ;
5656 ctx . drawImage ( img , 0 , 0 ) ;
57+ const pixelsArr = ctx . getImageData ( 0 , 0 , width , height ) . data ;
5758
58- imageObjects [ slot ] = { ctx , img, canvas } ;
59+ imageObjects [ slot ] = { img, canvas, pixelsArr } ;
5960 document . getElementById ( slot + "-img-div" ) . replaceChildren ( img ) ;
6061
6162 if ( imageObjects . source && imageObjects . target ) {
@@ -79,21 +80,22 @@ async function loadRegularImage(fileOrUrl, slot, settings=DEFAULT_SETTINGS) {
7980 * @returns {Promise<void> }
8081 */
8182async function loadGeoTIFF ( fileOrUrl , slot , settings = DEFAULT_SETTINGS ) {
82- const { fromArrayBuffer } = await import ( "https://esm.sh/geotiff@2.1.4-beta.0" ) ;
83+ // const { fromArrayBuffer } = await import("https://esm.sh/geotiff@2.1.4-beta.0");
8384
84- let arrayBuffer ;
85- if ( typeof fileOrUrl === "string" ) {
86- const base64 = fileOrUrl . split ( "," ) [ 1 ] ;
87- const binary = atob ( base64 ) ;
88- const bytes = new Uint8Array ( binary . length ) ;
89- for ( let i = 0 ; i < binary . length ; i ++ ) {
90- bytes [ i ] = binary . charCodeAt ( i ) ;
91- }
92- arrayBuffer = bytes . buffer ;
93- } else {
94- arrayBuffer = await fileOrUrl . arrayBuffer ( ) ;
95- }
96-
85+ // let arrayBuffer;
86+ // if (typeof fileOrUrl === "string") {
87+ // const base64 = fileOrUrl.split(",")[1];
88+ // const binary = atob(base64);
89+ // const bytes = new Uint8Array(binary.length);
90+ // for (let i = 0; i < binary.length; i++) {
91+ // bytes[i] = binary.charCodeAt(i);
92+ // }
93+ // arrayBuffer = bytes.buffer;
94+ // } else {
95+ // arrayBuffer = await fileOrUrl.arrayBuffer();
96+ // }
97+
98+ // const tiff = await fromBlob(fileOrUrl);
9799 const tiff = await fromArrayBuffer ( arrayBuffer ) ;
98100 const image = await tiff . getImage ( ) ;
99101 const rasters = await image . readRasters ( { interleave : true } ) ;
@@ -107,10 +109,11 @@ async function loadGeoTIFF(fileOrUrl, slot, settings=DEFAULT_SETTINGS) {
107109 const imageData = ctx . createImageData ( width , height ) ;
108110 imageData . data . set ( rasters ) ;
109111 ctx . putImageData ( imageData , 0 , 0 ) ;
112+ const pixelsArr = ctx . getImageData ( 0 , 0 , width , height ) . data ;
110113
111114 imageObjects [ slot ] = {
112- ctx,
113115 canvas,
116+ pixelsArr,
114117 geoMetadata : {
115118 geoKeys : image . getGeoKeys ( ) ,
116119 fileDirectory : image . fileDirectory ,
@@ -132,9 +135,8 @@ async function loadGeoTIFF(fileOrUrl, slot, settings=DEFAULT_SETTINGS) {
132135 */
133136async function processMatching ( settings = DEFAULT_SETTINGS ) {
134137 const sourceCanvas = imageObjects . source . canvas ;
135- const targetCanvas = imageObjects . target . canvas ;
136- const sourceArr = imageObjects . source . ctx . getImageData ( 0 , 0 , sourceCanvas . width , sourceCanvas . height ) . data ;
137- const targetArr = imageObjects . target . ctx . getImageData ( 0 , 0 , targetCanvas . width , targetCanvas . height ) . data ;
138+ const sourceArr = imageObjects . source . pixelsArr ;
139+ const targetArr = imageObjects . target . pixelsArr ;
138140
139141 // Perform histogram matching
140142 const start = Date . now ( ) ;
@@ -202,7 +204,8 @@ async function displayResults(outCanvas, matched, elapsed_ms) {
202204 const url = URL . createObjectURL ( blob ) ;
203205 const img = document . createElement ( "img" ) ;
204206 img . src = url ;
205- a . href = url ;
207+ if ( ! imageObjects . source . geoMetadata )
208+ a . href = url ;
206209 container . replaceChildren ( img ) ;
207210
208211 // Add statistics
0 commit comments