heic / app.py
namelessai's picture
Add application files.
03672ff verified
import gradio as gr
import os
import tempfile
from PIL import Image
import pillow_heif
import numpy as np
def convert_heic_to_png(heic_file):
"""
Convert HEIC image to PNG format with lossless compression
Args:
heic_file (str): Path to the HEIC file
Returns:
str: Path to the converted PNG file
"""
try:
# Register HEIF opener with Pillow
pillow_heif.register_heif_opener()
# Open the HEIC file
img = Image.open(heic_file)
# Create a temporary file for the output PNG
with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as tmp:
# Save as PNG with maximum compression (lossless)
img.save(tmp.name, 'PNG', compress_level=9)
return tmp.name
except Exception as e:
raise gr.Error(f"Error converting HEIC to PNG: {str(e)}")
def process_heic_files(files):
"""
Process one or more HEIC files and return download links for the converted PNGs
"""
if not files:
return None
output_files = []
for file in files:
try:
png_path = convert_heic_to_png(file.name)
output_files.append(png_path)
except Exception as e:
print(f"Error processing {file.name}: {str(e)}")
return output_files if output_files else None
# Create the Gradio interface
demo = gr.Interface(
fn=process_heic_files,
inputs=gr.File(
file_count="multiple",
file_types=[".heic", ".HEIC", ".heif", ".HEIF"],
label="Upload HEIC/HEIF Files"
),
outputs=gr.Files(label="Download Converted PNGs"),
title="HEIC to PNG Converter",
description="Upload one or more HEIC/HEIF images to convert them to lossless PNG format.",
allow_flagging="never"
)
if __name__ == "__main__":
# Print installation instructions if pillow_heif is not available
try:
import pillow_heif
except ImportError:
print("Error: pillow_heif is required but not installed.")
print("Please install it using: pip install pillow-heif")
exit(1)
# Run the Gradio app
demo.launch(share=False)