qrencode-1.2/0000755000175000017500000000000012752311231011253 5ustar hlehleqrencode-1.2/setup.py0000644000175000017500000000077612752311007013000 0ustar hlehlefrom distutils.core import setup, Extension encode = Extension('qrencode._qrencode', sources=['qr_encode.c'], libraries=['qrencode']) setup(name='qrencode', version='1.2', description='Encodes QR-codes.', author='Nick Johnson', author_email='arachnid@notdot.net', url='http://github.com/Arachnid/pyqrencode/tree/master', long_description='''A simple wrapper for the C qrencode library.''', packages=['qrencode'], ext_modules=[encode], requires=['PIL']) qrencode-1.2/qrencode/0000755000175000017500000000000012752311231013053 5ustar hlehleqrencode-1.2/qrencode/__init__.py0000644000175000017500000000602612752310641015174 0ustar hlehleimport sys from ._qrencode import encode as _encode from PIL import Image if sys.version_info >= (3,): unicode = str basestring = (str, bytes) QR_ECLEVEL_L = 0 QR_ECLEVEL_M = 1 QR_ECLEVEL_Q = 2 QR_ECLEVEL_H = 3 levels = [QR_ECLEVEL_L, QR_ECLEVEL_M, QR_ECLEVEL_Q, QR_ECLEVEL_H] QR_MODE_8 = 2 QR_MODE_KANJI = 3 hints = [QR_MODE_8, QR_MODE_KANJI] def encode(data, version=0, level=QR_ECLEVEL_L, hint=QR_MODE_8, case_sensitive=True): """Creates a QR-Code from string data. Args: data: string: The data to encode in a QR-code. If a unicode string is supplied, it will be encoded in UTF-8. version: int: The minimum version to use. If set to 0, the library picks the smallest version that the data fits in. level: int: Error correction level. Defaults to 'L'. hint: int: The type of data to encode. Either QR_MODE_8 or QR_MODE_KANJI. case_sensitive: bool: Should string data be encoded case-preserving? Returns: A (version, size, image) tuple, where image is a size*size PIL image of the QR-code. """ if isinstance(data, unicode): data = data.encode('utf8') elif not isinstance(data, basestring): raise ValueError('data argument must be a string.') version = int(version) if level not in levels: raise ValueError('Invalid error-correction level.') if hint not in hints: raise ValueError('Invalid encoding mode.') if case_sensitive: version, size, data = _encode(data, version, level, hint, True) else: version, size, data = _encode(data, version, level, hint, False) im = Image.frombytes('L', (size, size), data) return (version, size, im) def encode_scaled(data, size, version=0, level=QR_ECLEVEL_L, hint=QR_MODE_8, case_sensitive=True): """Creates a QR-code from string data, resized to the specified dimensions. Args: data: string: The data to encode in a QR-code. If a unicode string is supplied, it will be encoded in UTF-8. size: int: Output size. If this is not an exact multiple of the QR-code's dimensions, padding will be added. If this is smaller than the QR-code's dimensions, it is ignored. version: int: The minimum version to use. If set to 0, the library picks the smallest version that the data fits in. level: int: Error correction level. Defaults to 'L'. hint: int: The type of data to encode. Either QR_MODE_8 or QR_MODE_KANJI. case_sensitive: bool: Should string data be encoded case-preserving? Returns: A (version, size, image) tuple, where image is a size*size PIL image of the QR-code. """ version, src_size, im = encode(data, version, level, hint, case_sensitive) if size < src_size: size = src_size qr_size = (size / src_size) * src_size im = im.resize((qr_size, qr_size), Image.NEAREST) pad = (size - qr_size) / 2 ret = Image.new("L", (size, size), 255) ret.paste(im, (pad, pad)) return (version, size, ret) qrencode-1.2/PKG-INFO0000644000175000017500000000045412752311231012353 0ustar hlehleMetadata-Version: 1.1 Name: qrencode Version: 1.2 Summary: Encodes QR-codes. Home-page: http://github.com/Arachnid/pyqrencode/tree/master Author: Nick Johnson Author-email: arachnid@notdot.net License: UNKNOWN Description: A simple wrapper for the C qrencode library. Platform: UNKNOWN Requires: PIL qrencode-1.2/qr_encode.c0000644000175000017500000000262112752310641013363 0ustar hlehle#include #include #include #if PY_MAJOR_VERSION >= 3 # define BYTES "y" #else # define BYTES "s" #endif static PyObject *encode(PyObject *self, PyObject *args) { char *str; int i, version, level, hint, case_sensitive, num_pixels; QRcode *code; PyObject *ret; if(!PyArg_ParseTuple(args, BYTES "iiii:_qrencode.encode", &str, &version, &level, &hint, &case_sensitive)) return NULL; code = QRcode_encodeString(str, version, level, hint, case_sensitive); if (!code) { return Py_BuildValue(""); } num_pixels = code->width * code->width; for(i = 0; i < num_pixels; i++) code->data[i] = 255 - (code->data[i] & 0x1) * 0xFF; ret = Py_BuildValue("(ii" BYTES "#)", code->version, code->width, code->data, num_pixels); QRcode_free(code); return ret; }; static PyMethodDef methods[] = { {"encode", encode, METH_VARARGS, "Encodes a string as a QR-code. Returns a tuple of (version, width, data)"}, {NULL, NULL, 0, NULL} }; #if PY_MAJOR_VERSION >= 3 static PyModuleDef module = { PyModuleDef_HEAD_INIT, "qrencode._qrencode", NULL, -1, methods, }; PyMODINIT_FUNC PyInit__qrencode(void) { return PyModule_Create(&module); } #else PyMODINIT_FUNC init_qrencode(void) { Py_InitModule("qrencode._qrencode", methods); } #endif