import pixie/images, pixie/masks, pixie/paths, pixie/common, pixie/blends, pixie/fileformats/bmp, pixie/fileformats/png, pixie/fileformats/jpg, flatty/binny, os export images, masks, paths, common, blends type FileFormat* = enum ffPng, ffBmp, ffJpg proc toMask*(image: Image): Mask = ## Converts an Image to a Mask. result = newMask(image.width, image.height) for i in 0 ..< image.data.len: result.data[i] = image.data[i].a proc toImage*(mask: Mask): Image = ## Converts a Mask to Image. result = newImage(mask.width, mask.height) for i in 0 ..< mask.data.len: result.data[i].a = mask.data[i] proc decodeImage*(data: string | seq[uint8]): Image = ## Loads an image from a memory. if data.len > 8 and data.readUint64(0) == cast[uint64](pngSignature): decodePng(data) elif data.len > 2 and data.readUint16(0) == cast[uint16](jpgStartOfImage): decodeJpg(data) elif data.len > 2 and data.readStr(0, 2) == "BM": decodeBmp(data) else: raise newException(PixieError, "Unsupported image file format") proc readImage*(filePath: string): Image = ## Loads an image from a file. decodeImage(readFile(filePath)) proc encodeImage*(image: Image, fileFormat: FileFormat): string = ## Encodes an image into memory. case fileFormat: of ffPng: image.encodePng() of ffJpg: image.encodeJpg() of ffBmp: image.encodeBmp() proc writeFile*(image: Image, filePath: string, fileFormat: FileFormat) = ## Writes an image to a file. writeFile(filePath, image.encodeImage(fileFormat)) proc writeFile*(image: Image, filePath: string) = ## Writes an image to a file. let fileFormat = case splitFile(filePath).ext: of ".png": ffPng of ".bmp": ffBmp of ".jpg": ffJpg of ".jpeg": ffJpg else: raise newException(PixieError, "Unsupported image file extension") image.writeFile(filePath, fileformat)