export interface ExifData { name: string; value: string; } export interface ImageSEOData { src: string; alt: string; title: string; caption?: string; fileName: string; format: string; size: string; metadata: { location?: string; camera?: string; keywords: string[]; exifData: ExifData[]; }; } export interface GalleryImage { name: string url: string thumb: string responsive: string meta: Meta keywords: string[] description: string alt?: string title?: string height?: number width?: number } export interface Meta { format: string width: number height: number space: string channels: number depth: string density: number chromaSubsampling: string isProgressive: boolean resolutionUnit: string hasProfile: boolean hasAlpha: boolean orientation: number exif: Exif } export interface Exif { file: File jfif: Jfif exif: Exif2 gps: Gps } export interface File { "Bits Per Sample": BitsPerSample "Image Height": ImageHeight "Image Width": ImageWidth "Color Components": ColorComponents Subsampling: Subsampling FileType: FileType } export interface BitsPerSample { value: number description: string } export interface ImageHeight { value: number description: string } export interface ImageWidth { value: number description: string } export interface ColorComponents { value: number description: string } export interface Subsampling { description: string } export interface FileType { value: string description: string } export interface Jfif { "JFIF Version": JfifVersion "Resolution Unit": ResolutionUnit XResolution: Xresolution YResolution: Yresolution "JFIF Thumbnail Width": JfifThumbnailWidth "JFIF Thumbnail Height": JfifThumbnailHeight } export interface JfifVersion { value: number description: string } export interface ResolutionUnit { value: number description: string } export interface Xresolution { value: number description: string } export interface Yresolution { value: number description: string } export interface JfifThumbnailWidth { value: number description: string } export interface JfifThumbnailHeight { value: number description: string } export interface Exif2 { ImageDescription: ImageDescription Make: Make Model: Model Orientation: Orientation XResolution: Xresolution2 YResolution: Yresolution2 ResolutionUnit: ResolutionUnit2 Software: Software DateTime: DateTime YCbCrPositioning: YcbCrPositioning "Exif IFD Pointer": ExifIfdPointer "GPS Info IFD Pointer": GpsInfoIfdPointer XPTitle: Xptitle XPSubject: Xpsubject Padding: Padding ExposureTime: ExposureTime FNumber: Fnumber ExposureProgram: ExposureProgram ISOSpeedRatings: IsospeedRatings ExifVersion: ExifVersion DateTimeOriginal: DateTimeOriginal DateTimeDigitized: DateTimeDigitized ComponentsConfiguration: ComponentsConfiguration ExposureBiasValue: ExposureBiasValue MeteringMode: MeteringMode LightSource: LightSource Flash: Flash FocalLength: FocalLength SubSecTime: SubSecTime SubSecTimeOriginal: SubSecTimeOriginal SubSecTimeDigitized: SubSecTimeDigitized FlashpixVersion: FlashpixVersion ColorSpace: ColorSpace PixelXDimension: PixelXdimension PixelYDimension: PixelYdimension ExposureMode: ExposureMode WhiteBalance: WhiteBalance DigitalZoomRatio: DigitalZoomRatio FocalLengthIn35mmFilm: FocalLengthIn35mmFilm SceneCaptureType: SceneCaptureType GPSLatitudeRef: GpslatitudeRef GPSLatitude: Gpslatitude GPSLongitudeRef: GpslongitudeRef GPSLongitude: Gpslongitude GPSAltitude: Gpsaltitude } export interface ImageDescription { id: number description: string } export interface Make { id: number description: string } export interface Model { id: number description: string } export interface Orientation { id: number value: number description: string } export interface Xresolution2 { id: number description: string } export interface Yresolution2 { id: number description: string } export interface ResolutionUnit2 { id: number value: number description: string } export interface Software { id: number description: string } export interface DateTime { id: number description: string } export interface YcbCrPositioning { id: number value: number description: string } export interface ExifIfdPointer { id: number value: number description: number } export interface GpsInfoIfdPointer { id: number value: number description: number } export interface Xptitle { id: number description: string } export interface Xpsubject { id: number description: string } export interface Padding { id: number description: string } export interface ExposureTime { id: number description: string } export interface Fnumber { id: number description: string } export interface ExposureProgram { id: number value: number description: string } export interface IsospeedRatings { id: number value: number description: number } export interface ExifVersion { id: number description: string } export interface DateTimeOriginal { id: number description: string } export interface DateTimeDigitized { id: number description: string } export interface ComponentsConfiguration { id: number description: string } export interface ExposureBiasValue { id: number description: string } export interface MeteringMode { id: number value: number description: string } export interface LightSource { id: number value: number description: string } export interface Flash { id: number value: number description: string } export interface FocalLength { id: number description: string } export interface SubSecTime { id: number description: string } export interface SubSecTimeOriginal { id: number description: string } export interface SubSecTimeDigitized { id: number description: string } export interface FlashpixVersion { id: number description: string } export interface ColorSpace { id: number value: number description: string } export interface PixelXdimension { id: number value: number description: number } export interface PixelYdimension { id: number value: number description: number } export interface ExposureMode { id: number value: number description: string } export interface WhiteBalance { id: number value: number description: string } export interface DigitalZoomRatio { id: number description: string } export interface FocalLengthIn35mmFilm { id: number value: number description: string } export interface SceneCaptureType { id: number value: number description: string } export interface GpslatitudeRef { id: number description: string } export interface Gpslatitude { id: number description: number } export interface GpslongitudeRef { id: number description: string } export interface Gpslongitude { id: number description: number } export interface Gpsaltitude { id: number description: string } export interface Gps { Latitude: number Longitude: number } export const generateDefaultImageJSONLD = (imageData: ImageSEOData) =>{ return { "@context": "https://schema.org", "@type": "ImageObject", "contentUrl": imageData.src, "name": imageData.title, "description": imageData.caption || imageData.alt, "width": parseInt(imageData.size.split('x')[0]), "height": parseInt(imageData.size.split('x')[1]), "thumbnail": `https://example.com/thumbnails/${imageData.fileName}`, "license": "https://example.com/license", "acquireLicensePage": "https://example.com/buy-license", "copyrightNotice": `© ${new Date().getFullYear()} Default Organization`, "creator": { "@type": "Person", "name": "Default Creator Name" }, "copyrightHolder": { "@type": "Organization", "name": "Default Organization Name" }, "contentLocation": imageData.metadata.location || "Unknown location", "datePublished": new Date().toISOString().split('T')[0], "exifData": imageData.metadata.exifData.length > 0 ? imageData.metadata.exifData : [ { "@type": "PropertyValue", "name": "Camera", "value": imageData.metadata.camera || "Unknown camera" }, { "@type": "PropertyValue", "name": "Keywords", "value": imageData.metadata.keywords.join(', ') } ] }; } // Example usage const imageData: ImageSEOData = { src: "https://example.com/image.jpg", alt: "A beautiful scenery", title: "Beautiful Scenery", caption: "A beautiful scenery with mountains and a lake.", fileName: "scenery.jpg", format: "image/jpeg", size: "1200x800", metadata: { location: "Mountain Lake", camera: "Canon EOS 5D Mark IV", keywords: ["scenery", "mountain", "lake"], exifData: [ { name: "Exposure Time", value: "1/659 sec." }, { name: "FNumber", value: "f/4.0" }, { name: "ISO", value: "100" } ] } };