Spaces:
Sleeping
Sleeping
| import barcode | |
| from barcode.writer import ImageWriter | |
| import base64 | |
| import gradio as gr | |
| from io import BytesIO | |
| from PIL import Image | |
| import datetime | |
| import os | |
| def encode_file_to_base64(file_path): | |
| """Reads any file and encodes it to base64.""" | |
| with open(file_path, "rb") as f: | |
| encoded_data = base64.b64encode(f.read()).decode("utf-8") | |
| return encoded_data | |
| def generate_barcode(data: str, barcode_type: str = "code128"): | |
| """Generates a barcode from given data and returns an image in memory.""" | |
| try: | |
| barcode_class = barcode.get_barcode_class(barcode_type) | |
| barcode_instance = barcode_class(data, writer=ImageWriter()) | |
| # Simpan barcode ke dalam BytesIO | |
| output = BytesIO() | |
| barcode_instance.write(output) | |
| # Buka gambar dengan PIL untuk memastikan kompatibilitas dengan Gradio | |
| output.seek(0) | |
| img = Image.open(output) | |
| # Simpan gambar dengan nama file dinamis | |
| timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') | |
| file_name = f"flowly_ai_premium_barcode_generator_{timestamp}.png" | |
| # Simpan file gambar sebagai PNG | |
| file_path = os.path.join("generated_barcodes", file_name) | |
| os.makedirs(os.path.dirname(file_path), exist_ok=True) # Ensure the directory exists | |
| img.save(file_path) | |
| # Mengembalikan gambar untuk ditampilkan di Gradio dan path file untuk diunduh | |
| return img, file_path | |
| except Exception as e: | |
| return f"Error: {str(e)}", None | |
| def barcode_interface(input_type, text, file, barcode_type): | |
| if input_type == "Text" and text: | |
| return generate_barcode(text, barcode_type) | |
| elif input_type == "File" and file: | |
| encoded_file = encode_file_to_base64(file.name) | |
| return generate_barcode(encoded_file, barcode_type) | |
| else: | |
| return None | |
| interface = gr.Interface( | |
| fn=barcode_interface, | |
| inputs=[ | |
| gr.Radio(["Text", "File"], label="Input Type", value="Text"), | |
| gr.Textbox(label="Enter Text"), | |
| gr.File(label="Upload File"), | |
| gr.Dropdown(["code128", "ean13", "ean8"], label="Barcode Type", value="code128"), | |
| ], | |
| outputs=[gr.Image(type="numpy", label="Generated Barcode"), gr.File(label="Download Barcode")], | |
| description="Generate a Barcode from either text or any file.", | |
| css="footer {visibility: hidden}" | |
| ) | |
| interface.launch(share=True) | |