Spaces:
Sleeping
Sleeping
File size: 2,972 Bytes
001415b c930f4b f18daf4 001415b c930f4b 001415b c930f4b 001415b c930f4b f18daf4 001415b 5d8d25f 001415b 5d8d25f 001415b c930f4b 5d8d25f 001415b c930f4b 5d8d25f c930f4b 001415b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import gradio as gr
import barcode
from barcode.writer import SVGWriter
from io import BytesIO
import tempfile
import os
# Barcode explanations
BARCODE_EXPLANATIONS = {
"EAN13": (
"EAN-13 (International Article Number) is a 13-digit barcode widely used for retail products globally. "
"It encodes a GS1 prefix (country or organization), manufacturer code, product code, and a check digit. "
"EAN-13 is compatible with UPC systems and is essential for international product identification."
),
"Code128": (
"Code 128 is a high-density, variable-length barcode that can encode all ASCII characters (letters, numbers, symbols). "
"It is commonly used in logistics and shipping due to its ability to store complex data in a compact form and includes a checksum for error detection."
),
"UPC": (
"UPC (Universal Product Code) is a 12-digit barcode used mainly in North America for retail product identification. "
"It consists of a manufacturer code, item number, and a check digit. UPCs streamline inventory and checkout processes in stores."
),
"ISBN13": (
"ISBN-13 is a 13-digit identifier for books, encoded as an EAN-13 barcode. "
"It uniquely identifies books internationally and is essential for publishers, libraries, and retailers."
),
}
def generate_barcode_svg(text, barcode_type):
BARCODE_CLASSES = {
"EAN13": barcode.get_barcode_class('ean13'),
"Code128": barcode.get_barcode_class('code128'),
"UPC": barcode.get_barcode_class('upc'),
"ISBN13": barcode.get_barcode_class('isbn13'),
}
explanation = BARCODE_EXPLANATIONS.get(barcode_type, "No explanation available.")
try:
bc_class = BARCODE_CLASSES[barcode_type]
svg_buffer = BytesIO()
bc = bc_class(text, writer=SVGWriter())
bc.write(svg_buffer)
svg_data = svg_buffer.getvalue().decode("utf-8")
# Save SVG to a temporary file and return the file path
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".svg")
tmp.write(svg_data.encode("utf-8"))
tmp.close()
return explanation, svg_data, tmp.name
except Exception as e:
return f"Error: {str(e)}", None, None
with gr.Blocks() as demo:
gr.Markdown("# Barcode Generator (SVG Output with Download)")
with gr.Row():
text_input = gr.Textbox(label="Text to encode")
barcode_type = gr.Dropdown(
["EAN13", "Code128", "UPC", "ISBN13"],
value="Code128",
label="Barcode Type"
)
explanation_box = gr.Markdown(label="Barcode Explanation")
svg_output = gr.HTML(label="Generated Barcode (SVG)")
download_btn = gr.File(label="Download SVG")
btn = gr.Button("Generate Barcode")
btn.click(
generate_barcode_svg,
inputs=[text_input, barcode_type],
outputs=[explanation_box, svg_output, download_btn]
)
demo.launch() |