From 2227f2916b62488ff6a302dcb70848bbc719d60f Mon Sep 17 00:00:00 2001 From: Kazuki Suzuki Przyborowski <kazuki.przyborowski@gmail.com> Date: Fri, 22 Nov 2024 18:10:32 -0600 Subject: [PATCH] Small update --- upcean/encode/binary.py | 2 ++ upcean/encode/codabar.py | 2 +- upcean/encode/code11.py | 2 +- upcean/encode/code128.py | 2 +- upcean/encode/code32.py | 2 +- upcean/encode/code39.py | 4 ++-- upcean/encode/code93.py | 4 ++-- upcean/encode/ean13.py | 2 +- upcean/encode/ean2.py | 2 +- upcean/encode/ean5.py | 2 +- upcean/encode/ean8.py | 2 +- upcean/encode/itf.py | 2 +- upcean/encode/itf14.py | 2 +- upcean/encode/msi.py | 2 +- upcean/encode/plessey.py | 2 +- upcean/encode/stf.py | 2 +- upcean/encode/upca.py | 4 ++-- upcean/encode/upcavar.py | 4 ++-- upcean/encode/upce.py | 2 +- upcean/fonts/OCRA.otf | Bin 14356 -> 14744 bytes upcean/fonts/OCRA.ttf | Bin 15215 -> 15896 bytes upcean/fonts/OCRB.otf | Bin 18064 -> 18324 bytes upcean/fonts/OCRB.ttf | Bin 18761 -> 19444 bytes upcean/predraw/precairo.py | 4 ++-- upcean/predraw/preqahirah.py | 4 ++-- upcean/support.py | 2 +- 26 files changed, 29 insertions(+), 27 deletions(-) diff --git a/upcean/encode/binary.py b/upcean/encode/binary.py index 8c30f944..4c4d82dc 100644 --- a/upcean/encode/binary.py +++ b/upcean/encode/binary.py @@ -138,6 +138,8 @@ def encode_binary_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineFixTxtStart = 0 if(tkintersupport and imageoutlib == "tkinter"): LineFixTxtStart = 4 + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): + LineTxtStart = 1 while(txtbari < txtbarmax): texthidden = False if hidetext or (upc['text']['type'][txtbari] == "sn" and (hidesn is None or hidesn)) or (upc['text']['type'][txtbari] == "cd" and (hidecd is None or hidecd)): diff --git a/upcean/encode/codabar.py b/upcean/encode/codabar.py index abcc2b6c..423f39b0 100644 --- a/upcean/encode/codabar.py +++ b/upcean/encode/codabar.py @@ -267,7 +267,7 @@ def encode_codabar_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48 LineTxtStartNorm = 20 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): texthidden = False diff --git a/upcean/encode/code11.py b/upcean/encode/code11.py index 5b8de0e1..20f290a0 100644 --- a/upcean/encode/code11.py +++ b/upcean/encode/code11.py @@ -226,7 +226,7 @@ def encode_code11_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineTxtStartNorm = 10 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_print)): texthidden = False diff --git a/upcean/encode/code128.py b/upcean/encode/code128.py index e6f5fe93..85d86032 100644 --- a/upcean/encode/code128.py +++ b/upcean/encode/code128.py @@ -555,7 +555,7 @@ def encode_code128_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48 LineTxtStartNorm = 16 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) if(barcode_is_rev): upc_print.reverse() diff --git a/upcean/encode/code32.py b/upcean/encode/code32.py index 175eede3..b766496e 100644 --- a/upcean/encode/code32.py +++ b/upcean/encode/code32.py @@ -267,7 +267,7 @@ def encode_code32_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineTxtStartNorm = 30 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): texthidden = False diff --git a/upcean/encode/code39.py b/upcean/encode/code39.py index e348e82b..c6453321 100644 --- a/upcean/encode/code39.py +++ b/upcean/encode/code39.py @@ -289,7 +289,7 @@ def encode_code39_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineTxtStartNorm = 15 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) drawColorText(upc_img, 10 * int(resize * barwidth[1]), LineTxtStart * barwidth[0], vertical_text_fix + ( barheight[0] * int(resize)), "*", barcolor[1], "ocrb", imageoutlib) @@ -613,7 +613,7 @@ def encode_code39extended_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barhei LineTxtStartNorm = 15 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) drawColorText(upc_img, 10 * int(resize * barwidth[1]), LineTxtStart * barwidth[0], vertical_text_fix + ( barheight[0] * int(resize)), "*", barcolor[1], "ocrb", imageoutlib) diff --git a/upcean/encode/code93.py b/upcean/encode/code93.py index a9300f30..b565447e 100644 --- a/upcean/encode/code93.py +++ b/upcean/encode/code93.py @@ -297,7 +297,7 @@ def encode_code93_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineTxtStartNorm = 18 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): texthidden = False @@ -624,7 +624,7 @@ def encode_code93extended_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barhei LineTxtStartNorm = 18 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): texthidden = False diff --git a/upcean/encode/ean13.py b/upcean/encode/ean13.py index e2010695..831e9fb9 100644 --- a/upcean/encode/ean13.py +++ b/upcean/encode/ean13.py @@ -397,7 +397,7 @@ def encode_ean13_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineTxtStartNorm = 2 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = list(re.findall("(\\d{13})", upc)[0])+[">"] while (NumTxtZero < len(upc_print)): diff --git a/upcean/encode/ean2.py b/upcean/encode/ean2.py index a0b123fa..375aeb60 100644 --- a/upcean/encode/ean2.py +++ b/upcean/encode/ean2.py @@ -250,7 +250,7 @@ def encode_ean2_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 5 LineTxtStartNorm = 6 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = LeftDigit while (NumTxtZero < len(upc_print)): diff --git a/upcean/encode/ean5.py b/upcean/encode/ean5.py index c4f4f7f0..9f13aaa6 100644 --- a/upcean/encode/ean5.py +++ b/upcean/encode/ean5.py @@ -337,7 +337,7 @@ def encode_ean5_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 5 LineTxtStartNorm = 7 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = LeftDigit while (NumTxtZero < len(upc_print)): diff --git a/upcean/encode/ean8.py b/upcean/encode/ean8.py index 0b7538b2..22370f40 100644 --- a/upcean/encode/ean8.py +++ b/upcean/encode/ean8.py @@ -404,7 +404,7 @@ def encode_ean8_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 5 LineTxtStartNorm = 0 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = ["<"]+list(re.findall("(\\d{8})", upc)[0])+[">"] while (NumTxtZero < len(upc_print)): diff --git a/upcean/encode/itf.py b/upcean/encode/itf.py index 6a903dee..61d4a660 100644 --- a/upcean/encode/itf.py +++ b/upcean/encode/itf.py @@ -292,7 +292,7 @@ def encode_itf_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 54 LineTxtStartNorm = 20 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): ArrayDigit = list(upc_matches[NumTxtZero]) diff --git a/upcean/encode/itf14.py b/upcean/encode/itf14.py index 2ba5bdf2..0c416347 100644 --- a/upcean/encode/itf14.py +++ b/upcean/encode/itf14.py @@ -300,7 +300,7 @@ def encode_itf14_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, LineTxtStartNorm = 23 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): ArrayDigit = list(upc_matches[NumTxtZero]) diff --git a/upcean/encode/msi.py b/upcean/encode/msi.py index 3a5c9c3a..c278a10d 100644 --- a/upcean/encode/msi.py +++ b/upcean/encode/msi.py @@ -207,7 +207,7 @@ def encode_msi_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 54 LineTxtStartNorm = 16 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_print)): texthidden = False diff --git a/upcean/encode/plessey.py b/upcean/encode/plessey.py index e0bab39a..4470951f 100644 --- a/upcean/encode/plessey.py +++ b/upcean/encode/plessey.py @@ -235,7 +235,7 @@ def encode_plessey_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48 LineTxtStartNorm = 30 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): texthidden = False diff --git a/upcean/encode/stf.py b/upcean/encode/stf.py index 014a9bfc..0da07553 100644 --- a/upcean/encode/stf.py +++ b/upcean/encode/stf.py @@ -244,7 +244,7 @@ def encode_stf_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 54 LineTxtStartNorm = 24 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) while (NumTxtZero < len(upc_matches)): texthidden = False diff --git a/upcean/encode/upca.py b/upcean/encode/upca.py index 835628bb..e6d06cec 100644 --- a/upcean/encode/upca.py +++ b/upcean/encode/upca.py @@ -331,7 +331,7 @@ def encode_upca_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 5 LineTxtStartNorm = 1 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = list(re.findall("(\\d{12})", upc)[0]) while (NumTxtZero < len(upc_print)): @@ -726,7 +726,7 @@ def encode_upcaean_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48 LineTxtStartNorm = 2 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = [0]+list(re.findall("(\\d{12})", upc)[0])+[">"] while (NumTxtZero < len(upc_print)): diff --git a/upcean/encode/upcavar.py b/upcean/encode/upcavar.py index 5890234e..6cd75069 100644 --- a/upcean/encode/upcavar.py +++ b/upcean/encode/upcavar.py @@ -338,7 +338,7 @@ def encode_upcavar_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48 LineTxtStartNorm = 1 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = list(re.findall("(\\d+)", upc)[0]) while (NumTxtZero < len(upc_print)): @@ -739,7 +739,7 @@ def encode_upcaeanvar_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight= LineTxtStartNorm = 2 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = [0]+list(re.findall("(\\d+)", upc)[0])+[">"] while (NumTxtZero < len(upc_print)): diff --git a/upcean/encode/upce.py b/upcean/encode/upce.py index 7129208c..2e7520fc 100644 --- a/upcean/encode/upce.py +++ b/upcean/encode/upce.py @@ -419,7 +419,7 @@ def encode_upce_barcode(inimage, upc, resize=1, shiftxy=(0, 0), barheight=(48, 5 LineTxtStartNorm = 1 if(tkintersupport and imageoutlib == "tkinter"): LineTxtStart += (4 * int(resize)) - elif(cairosupport and (imageoutlib == "cairo" or imageoutlib == "cairosvg")): + elif(svgwritesupport and not cairosvgsupport and imageoutlib == "svgwrite"): LineTxtStart += (1 * int(resize)) upc_print = list(re.findall("(\\d{8})", upc)[0]) while (NumTxtZero < len(upc_print)): diff --git a/upcean/fonts/OCRA.otf b/upcean/fonts/OCRA.otf index 86f56dcdc5cb1ccf7d94b79fea46d7a461ff6683..9cc8b41bd2cacfc8352bd11844f59484f0adc0fe 100644 GIT binary patch delta 2411 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 R#wF8W5!^$r0=`5J{2SWid4>Q0 delta 2049 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 UJ$NPjlB?wkesO6EgNgzE4dDwi3;+NC diff --git a/upcean/fonts/OCRA.ttf b/upcean/fonts/OCRA.ttf index ed702ff1d0697c2f9b5102bfaf7cb494b20bdcbd..6a64901c92dccd9b600f2aa2f06f88d8b37b5f05 100644 GIT binary patch delta 2350 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 A)Bpeg delta 2174 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 SEKUF9KJ%pUS>0)kBmV_(Qm5|# diff --git a/upcean/fonts/OCRB.otf b/upcean/fonts/OCRB.otf index 3dab41e086c97cd33b8ff2e7ef043a077b3187b5..c764b0f4e085551e2eafcd6d1c32e5220a9e550e 100644 GIT binary patch delta 6145 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 delta 5966 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 YGY);j0<^5_(128Sys0b}tV8I30r7NGNB{r; diff --git a/upcean/fonts/OCRB.ttf b/upcean/fonts/OCRB.ttf index 1406f555fcbcaddca7702e0d5cf7c09ca01ac926..eb9d4577c418e16cc955cf9b72548d59ec33cb57 100644 GIT binary patch delta 6931 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 J`S-u{{5OaX!bJc8 delta 6367 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 Nxp->7e)V_YzX2~pRy_a! diff --git a/upcean/predraw/precairo.py b/upcean/predraw/precairo.py index c85fa882..364ff3fa 100644 --- a/upcean/predraw/precairo.py +++ b/upcean/predraw/precairo.py @@ -238,7 +238,7 @@ def drawColorRectangleAlt(ctx, x1, y1, x2, y2, color, line_width=1): return True # Define valid PyCairo output formats -cairo_valid_extensions = {"SVG", "PDF", "PS", "EPS", "RAW", "CAIRO"} +cairo_valid_extensions = {"SVG", "PDF", "PS", "EPS", "RAW", "CAIRO", "QAHIRAH"} def get_save_filename(outfile): """ @@ -377,7 +377,7 @@ def save_to_file(inimage, outfile, outfileext, imgcomment="barcode"): image_context.paint() image_surface.flush() image_surface.finish() - elif(outfileext == "CAIRO"): + elif(outfileext == "CAIRO" or outfileext == "QAHIRAH"): # Create an ScriptSurface with the exact dimensions of the recorded content image_surface = cairo.ScriptSurface(cairo.ScriptDevice(outfile), cairo.FORMAT_RGB24, int(width), int(height)) image_context = cairo.Context(image_surface) diff --git a/upcean/predraw/preqahirah.py b/upcean/predraw/preqahirah.py index 9d1e55b1..ef32df2f 100644 --- a/upcean/predraw/preqahirah.py +++ b/upcean/predraw/preqahirah.py @@ -182,7 +182,7 @@ def drawColorRectangleAlt(ctx, x1, y1, x2, y2, color, line_width=1): return True # Define valid Qahirah output formats -cairo_valid_extensions = {"SVG", "PDF", "PS", "EPS", "RAW", "CAIRO"} +cairo_valid_extensions = {"SVG", "PDF", "PS", "EPS", "RAW", "CAIRO", "QAHIRAH"} def get_save_filename(outfile): """ @@ -322,7 +322,7 @@ def save_to_file(inimage, outfile, outfileext, imgcomment="barcode"): image_context.set_source_surface(upc_preimg, (-x, -y)) image_context.paint() image_surface.flush() - if outfileext == "CAIRO": + elif outfileext == "CAIRO" or outfileext == "QAHIRAH": # Step 1: Create the ScriptDevice, specifying the output file script_device = qah.ScriptDevice.create(outfile) # Step 2: Create a proxy surface linked to the ScriptDevice diff --git a/upcean/support.py b/upcean/support.py index 2fd58068..6d31b591 100644 --- a/upcean/support.py +++ b/upcean/support.py @@ -70,7 +70,7 @@ def get_importing_script_path(): enable_pilsupport = True enable_cairosupport = True enable_qahirahsupport = True - enable_cairosvgsupport = True + enable_cairosvgsupport = False enable_wandsupport = True enable_magicksupport = True enable_pgmagicksupport = True