This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
const iso = (d: string | Date) => {
|
const iso = (d: string | Date) => {
|
||||||
if(!d) return ""
|
if(!d) return ""
|
||||||
const v = toDate(d);
|
const v = toDate(d);
|
||||||
|
if(!v) return ""
|
||||||
return isNaN(v.getTime()) ? "" : v.toISOString();
|
return isNaN(v.getTime()) ? "" : v.toISOString();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Unsortierte Bilder aus unserer Wanderung durch die Picos de Europa.
|
|||||||
|
|
||||||
import Image from "@components/Image.astro";
|
import Image from "@components/Image.astro";
|
||||||
import ImageGallery from "@components/ImageGallery.svelte"
|
import ImageGallery from "@components/ImageGallery.svelte"
|
||||||
|
import ImageSlider from "@components/ImageSlider.svelte"
|
||||||
|
|
||||||
<ImageGallery client:load/>
|
<ImageGallery client:load/>
|
||||||
|
|
||||||
@@ -24,9 +25,11 @@ import image1 from "images/20250527_125228.jpg"
|
|||||||
import image16 from "images/PXL_20250527_101057540.MP.jpg"
|
import image16 from "images/PXL_20250527_101057540.MP.jpg"
|
||||||
import image17 from "images/PXL_20250527_100728883.jpg"
|
import image17 from "images/PXL_20250527_100728883.jpg"
|
||||||
|
|
||||||
<Image alt="" src={image1} alt="Bild einer Kuh auf einer Wiese vor dem Meer"/>
|
<ImageSlider title="Wanderung" client:load>
|
||||||
<Image alt="" src={image17} alt="Person auf flysch gestein vor einer Höhle am Meer"/>
|
<Image src={image1} alt="Bild einer Kuh auf einer Wiese vor dem Meer"/>
|
||||||
<Image alt="" src={image16} alt="Bild von Person in einer Höhle aus der man das Meer sieht"/>
|
<Image src={image17} alt="Person auf flysch gestein vor einer Höhle am Meer"/>
|
||||||
|
<Image src={image16} alt="Bild von Person in einer Höhle aus der man das Meer sieht"/>
|
||||||
|
</ImageSlider>
|
||||||
|
|
||||||
## 28. May
|
## 28. May
|
||||||
|
|
||||||
@@ -35,8 +38,10 @@ Erster Wandertag
|
|||||||
import image15 from "images/PXL_20250528_121633744.MP.jpg"
|
import image15 from "images/PXL_20250528_121633744.MP.jpg"
|
||||||
import image19 from "images/20250528_164715.jpg"
|
import image19 from "images/20250528_164715.jpg"
|
||||||
|
|
||||||
<Image alt="" src={image15} alt="15"/>
|
<ImageSlider title="Wanderung" client:load>
|
||||||
<Image alt="" src={image19} alt="19"/>
|
<Image src={image15} alt="Wir nach den ersten 300 Metern"/>
|
||||||
|
<Image src={image19} alt="Viele Bergziegen die gerne das Salz von der Haut lecken"/>
|
||||||
|
</ImageSlider>
|
||||||
|
|
||||||
## 29. May
|
## 29. May
|
||||||
|
|
||||||
@@ -47,8 +52,7 @@ import image12 from "images/PXL_20250530_082919731.jpg"
|
|||||||
import image13 from "images/PXL_20250529_201559403.jpg"
|
import image13 from "images/PXL_20250529_201559403.jpg"
|
||||||
|
|
||||||
<video src={videoUrl1} controls alt=""/>
|
<video src={videoUrl1} controls alt=""/>
|
||||||
<Image alt="" src={image12} alt="12"/>
|
<Image alt="" src={image12} alt="Endlich am Refugio angekommen"/>
|
||||||
<Image alt="" src={image13} alt="13"/>
|
|
||||||
|
|
||||||
## 30-31. May
|
## 30-31. May
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { rgbaToThumbHash } from "thumbhash";
|
import { rgbaToThumbHash } from "thumbhash";
|
||||||
import ExifReader from "exifreader";
|
import ExifReader from "exifreader";
|
||||||
import type { ImageMetadata } from "astro";
|
import type { ImageMetadata } from "astro";
|
||||||
|
import { readFile } from "node:fs/promises";
|
||||||
import sharp from "sharp";
|
import sharp from "sharp";
|
||||||
|
|
||||||
export async function generateThumbHash(
|
export async function generateThumbHash(
|
||||||
@@ -72,23 +73,26 @@ const allowedExif = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export async function getExifData(image: ImageMetadata) {
|
export async function getExifData(image: ImageMetadata) {
|
||||||
if (image.format === "svg") return undefined; // SVGs don't have EXIF data")
|
if (image.format === "svg") return undefined; // SVGs don't have EXIF data
|
||||||
const imagePath = (image as ImageMetadata & { fsPath: string }).fsPath ??
|
const imagePath = (image as ImageMetadata & { fsPath: string }).fsPath ??
|
||||||
image.src;
|
image.src;
|
||||||
|
|
||||||
if (!imagePath) return undefined;
|
if (!imagePath) return undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let buffer: ArrayBuffer;
|
let buffer: ArrayBufferLike;
|
||||||
if (imagePath.startsWith("https://") || imagePath.startsWith("http://")) {
|
if (imagePath.startsWith("https://") || imagePath.startsWith("http://")) {
|
||||||
const res = await fetch(imagePath);
|
const res = await fetch(imagePath);
|
||||||
buffer = await res.arrayBuffer();
|
buffer = await res.arrayBuffer();
|
||||||
} else {
|
} else {
|
||||||
buffer = await sharp(imagePath).toBuffer() as unknown as ArrayBuffer;
|
const b = await readFile(imagePath);
|
||||||
|
buffer = b.buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tags = await ExifReader.load(buffer, { async: true });
|
const tags = await ExifReader.load(buffer, { async: true });
|
||||||
|
|
||||||
|
if (!buffer) return undefined;
|
||||||
|
|
||||||
const out: Record<string, any> = {};
|
const out: Record<string, any> = {};
|
||||||
let hasExif = false;
|
let hasExif = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user