Skip to content

Commit e132bcd

Browse files
committed
quickfixes
1 parent 3fe5aa0 commit e132bcd

2 files changed

Lines changed: 30 additions & 25 deletions

File tree

‎histogram-matching-js.html‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
.flex-grid-thirds {
2323
display: flex;
2424
justify-content: space-between;
25+
width: 70%;
26+
margin: auto;
2527
}
2628
.flex-grid-thirds .col {
2729
width: 32%;

‎src/histogram-matching/histogram-main.js‎

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { 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
*/
2727
async 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
*/
8182
async 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
*/
133136
async 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

Comments
 (0)