mirror of https://github.com/status-im/qzxing.git
129 lines
4.3 KiB
Python
129 lines
4.3 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import os
|
||
|
import glob
|
||
|
import sys
|
||
|
import subprocess
|
||
|
import traceback
|
||
|
import hashlib
|
||
|
import urllib
|
||
|
import urllib2
|
||
|
|
||
|
ZINT = 'zint'
|
||
|
ZINT_RSS_EXPANDED_CODE = 31
|
||
|
ZINT_BINARY = "zint" # If available in PATH
|
||
|
|
||
|
POSTSCRIPT = 'postscript'
|
||
|
|
||
|
TEST_FILE = "../../../src/com/google/zxing/oned/rss/RSSExpandedBlackBox3TestCase.java"
|
||
|
|
||
|
def check_zint():
|
||
|
try:
|
||
|
subprocess.Popen("zint", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||
|
except:
|
||
|
print >> sys.stderr, "zint not installed. Go to http://www.zint.org.uk/ and install it"
|
||
|
return False
|
||
|
return True
|
||
|
|
||
|
def check_postscript():
|
||
|
return True
|
||
|
|
||
|
GENERATORS = []
|
||
|
if check_zint():
|
||
|
GENERATORS.append(ZINT)
|
||
|
if check_postscript():
|
||
|
GENERATORS.append(POSTSCRIPT)
|
||
|
|
||
|
def generate_image_zint(image_filename, barcode):
|
||
|
braces_barcode = barcode.replace("(","[").replace(")","]")
|
||
|
os.system('%s -o %s -b %s -d "%s"' % (ZINT_BINARY, image_filename, ZINT_RSS_EXPANDED_CODE, braces_barcode.replace('"','\\"')))
|
||
|
|
||
|
def generate_image_postscript(image_filename, barcode):
|
||
|
hashname = "cache/%s.png" % hashlib.new("md5", barcode).hexdigest()
|
||
|
# If it exists in the cache, don't download it
|
||
|
if os.path.exists(hashname):
|
||
|
content = open(hashname).read()
|
||
|
open(image_filename,'w').write(content)
|
||
|
return
|
||
|
|
||
|
# We tried use the Python, Perl and LaTeX bindings without success :-(
|
||
|
baseurl = "http://www.terryburton.co.uk/barcodewriter/generator/"
|
||
|
encoded = urllib.urlencode({
|
||
|
"encoder" : "rssexpanded",
|
||
|
"data" : barcode,
|
||
|
"options" : "",
|
||
|
"translate_x" : "50", "translate_y" : "50",
|
||
|
"scale_x" : "2", "scale_y" : "2",
|
||
|
"rotate" : "0", "submit" : "Make Barcode"
|
||
|
})
|
||
|
web_urlobject = urllib2.urlopen(baseurl, data = encoded)
|
||
|
web_content = web_urlobject.read()
|
||
|
png_url = web_content.split('">PNG</a>')[0].split('<a href="')[-1]
|
||
|
if not png_url.startswith("tmp"):
|
||
|
raise Exception("There was an error processing barcode %s in postscript" % barcode)
|
||
|
full_url = baseurl + png_url
|
||
|
png_content = urllib2.urlopen(full_url).read()
|
||
|
open(hashname,'w').write(png_content)
|
||
|
open(image_filename,'w').write(png_content)
|
||
|
|
||
|
def generate_image(image_filename, barcode, generator):
|
||
|
if generator == ZINT:
|
||
|
generate_image_zint(image_filename, barcode)
|
||
|
elif generator == POSTSCRIPT:
|
||
|
generate_image_postscript(image_filename, barcode)
|
||
|
else:
|
||
|
raise Exception("Unknown generator: %s" % generator)
|
||
|
|
||
|
def extract_barcodes():
|
||
|
for line in open("generation.config"):
|
||
|
content = line.split("#")[0].strip()
|
||
|
if content != "":
|
||
|
if content[0] == '-':
|
||
|
pos = content[1:].find('-')
|
||
|
exceptions = content[1:pos+1].split(",")
|
||
|
barcode = content[pos + 2:]
|
||
|
yield exceptions, barcode
|
||
|
else:
|
||
|
yield (), content
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
counter = 0
|
||
|
|
||
|
for image_to_delete in glob.glob("*.png"):
|
||
|
os.remove(image_to_delete)
|
||
|
|
||
|
for text_to_delete in glob.glob("*.txt"):
|
||
|
os.remove(text_to_delete)
|
||
|
|
||
|
for generator in GENERATORS:
|
||
|
for exceptions, barcode in extract_barcodes():
|
||
|
if generator in exceptions:
|
||
|
continue
|
||
|
try:
|
||
|
counter += 1
|
||
|
image_filename = str(counter) + ".png"
|
||
|
text_filename = str(counter) + ".txt"
|
||
|
open(text_filename, "w").write(barcode)
|
||
|
generate_image(image_filename, barcode, generator)
|
||
|
except Exception:
|
||
|
print "Error with generator %s and barcode %s" % (generator, barcode)
|
||
|
traceback.print_exc()
|
||
|
counter -= 1
|
||
|
|
||
|
open(TEST_FILE,'w').write("""package com.google.zxing.oned.rss;
|
||
|
|
||
|
import com.google.zxing.BarcodeFormat;
|
||
|
import com.google.zxing.MultiFormatReader;
|
||
|
import com.google.zxing.common.AbstractBlackBoxTestCase;
|
||
|
|
||
|
public class RSSExpandedBlackBox3TestCase extends AbstractBlackBoxTestCase {
|
||
|
|
||
|
public RSSExpandedBlackBox3TestCase() {
|
||
|
super("test/data/blackbox/rssexpanded-3", new MultiFormatReader(), BarcodeFormat.RSS_EXPANDED);
|
||
|
addTest(%(number)s, %(number)s, 0.0f);
|
||
|
addTest(%(number)s, %(number)s, 180.0f);
|
||
|
}
|
||
|
}
|
||
|
""" % {"number" : counter})
|
||
|
|