Spaces:
Build error
Build error
| import os | |
| from PIL import Image | |
| import pyheif | |
| import io | |
| class ImageConverter: | |
| def __init__(self): | |
| self.supported_formats = { | |
| 'jpg': 'JPEG', | |
| 'jpeg': 'JPEG', | |
| 'png': 'PNG', | |
| 'bmp': 'BMP', | |
| 'tiff': 'TIFF', | |
| 'gif': 'GIF', | |
| 'webp': 'WEBP', | |
| 'ico': 'ICO', | |
| 'heic': 'HEIC', | |
| 'heiv': 'HEIC', | |
| 'heif': 'HEIC', | |
| } | |
| def open_heif_image(self, input_image): | |
| heif_file = pyheif.read(input_image) | |
| return Image.frombytes( | |
| heif_file.mode, | |
| heif_file.size, | |
| heif_file.data, | |
| "raw", | |
| heif_file.mode, | |
| heif_file.stride, | |
| ) | |
| def convert_image(self, input_image, output_format, output_path=None): | |
| try: | |
| if not os.path.exists(input_image): | |
| raise FileNotFoundError(f"The input image '{input_image}' does not exist.") | |
| input_extension = input_image.split('.')[-1].lower() | |
| if input_extension not in self.supported_formats: | |
| raise ValueError(f"The input format '{input_extension}' is not supported.") | |
| if output_format.lower() not in self.supported_formats: | |
| raise ValueError(f"The output format '{output_format}' is not supported.") | |
| if input_extension in ['heic', 'heiv', 'heif']: | |
| image = self.open_heif_image(input_image) | |
| else: | |
| image = Image.open(input_image) | |
| if output_path is None: | |
| output_image = '.'.join(input_image.split('.')[:-1]) + f'.{output_format}' | |
| else: | |
| output_image = output_path | |
| image.save(output_image, self.supported_formats[output_format.lower()]) | |
| print(f"Image converted and saved as {output_image}") | |
| return output_image, "Image converted and saved as {output_image}" | |
| except Exception as e: | |
| None, print(f"Error: {e}") | |
| def convert_image(input_image, output_format): | |
| converter = ImageConverter() | |
| return converter.convert_image(input_image.name, output_format) |