{ "info": { "author": "Christian Tismer", "author_email": "tismer@stackless.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: MacOS X", "Environment :: Other Environment", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications :: Qt", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: Python Software Foundation License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Multimedia :: Graphics :: Capture :: Scanners", "Topic :: Multimedia :: Graphics :: Graphics Conversion", "Topic :: Other/Nonlisted Topic", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "Tiffany - Read/Write Multipage-Tiff with PIL without PIL\n========================================================\n\nTiffany stands for any tiff. The tiny module solves a large set of\nproblems, has no dependencies and just works wherever Python works.\nTiffany was developed in the course of the *Pydica* project and will\nnow appear on PyPi.\n\nAbstract\n========\n\nDuring the development of *Pydica* (Python Distributed Capture) we were\nconfronted with the problem to read multipage Tiff scans. The GUI toolkit\n*PySide (Qt)* does support Tiff, but only shows the first page. We also had\nto support Fax compression (CCITT G3/G4), but *Qt* supports this.\n\nAs a first approach we copied single pages out of multi-page tiff files\nusing *tiffcp* or *tiffutil* (OS X) as a temp file for display. A sub-optimum\nsolution, especially for data security reasons.\n\nThe second approach replaced this by a tiny modification of the linkage of\nthe tiff directories (IFD). This way, a tiff file could be patched in memory\nwith the wanted page offset and then be shown without any files involved.\n\nUnfortunately also this solution was not satisfactory:\n\n- our tiff files have anomalies in their tiff tags like too many null-bytes\n and wrong tag order,\n\n- Qt's implementation of tiff is over-pedantic and ignores all tags after the\n smallest error.\n \nBeing a good friend of *Fredrik Lundh* and his *PIL* since years, I tried to\nattack the problem using this. Sadly Fredrik hasn't worked much on this since\n2006, and the situation is slightly messed up:\n\n*PIL* has a clean-up of tiff tags, but cannot cope with fax compression by default.\nThere exists a patch since many years, but this complicates the build process\nand pulls with *libtiff* a lot of dependencies in.\n\nFurthermore, *PIL* is unable to write fax compressed files, but blows the data\nup to the full size, making this approach only a half solution as well.\n\nAfter a longer odyssey I saw then the light of a Tiffany lamp:\n\nI use only a hand-full of *PIL*s files, without any modification, pretend to unpack\na tiff file, but actually cheating. Only the tiff tags are nicely processed and\nstreamlined, but the compressed data is taken unmodified as-is.\nWhen writing a tiff page out, the existing data is just assembled in the correct\norder.\n\nFor many projects like *Pydica* that are processing tiff files without editing\ntheir contents, this is a complete solution of their tiff problem. The dependencies\nof the project stay minimal, there are no binaries required, and Tiffany is with\nless than 300 lines remarkably small.\n\nBecause just 5 files from *PIL* are used and the _imaging module is not compiled\nat all, I'm talking about \"PIL without PIL\" ;-)\n\nTiffany is a stand-alone module and has no interference with *PIL*.\nYou can see this by looking at ``import_mapper.py``. This module modifies ``__import__``\nso that the *PIL* modules appear as top-level internally, but become sub-modules of\ntiffany in ``sys.modules``.\n\nPlease let me know if this stuff works for you, and send requests to\n or use the links in the bitbucket website:\n\nhttps://bitbucket.org/pydica/tiffany\n\neasiest way to install tiffany:\n\n ``$ pip install tiffany``\n\n# EOF", "description_content_type": null, "docs_url": null, "download_url": "https://bitbucket.org/pydica/tiffany/downloads", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/pydica/tiffany", "keywords": "tiff fax G3/G4 multi-page monkeypatch PIL pydica", "license": "PSF", "maintainer": null, "maintainer_email": null, "name": "tiffany", "package_url": "https://pypi.org/project/tiffany/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/tiffany/", "project_urls": { "Download": "https://bitbucket.org/pydica/tiffany/downloads", "Homepage": "https://bitbucket.org/pydica/tiffany" }, "release_url": "https://pypi.org/project/tiffany/0.6.7/", "requires_dist": null, "requires_python": null, "summary": "Tiffany -- read/write/arrange any multi-page Tiff, any compression", "version": "0.6.7" }, "last_serial": 1400540, "releases": { "0.3": [], "0.4": [], "0.5": [], "0.6": [], "0.6.1": [], "0.6.2": [], "0.6.3": [], "0.6.4": [], "0.6.5": [ { "comment_text": "", "digests": { "md5": "ba9e69e851de14880e0bf760e2f1d85d", "sha256": "cf93319548e7c06af3aabba543ec1773fff1f864bd68e659ab1581455cd11bc1" }, "downloads": -1, "filename": "tiffany-0.6.5.tar.gz", "has_sig": false, "md5_digest": "ba9e69e851de14880e0bf760e2f1d85d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 193420, "upload_time": "2014-04-09T23:11:02", "url": "https://files.pythonhosted.org/packages/a7/81/e7fb3ee9c8d2a8ab4a658f10615a036f5e11f35898e9cbc219c50e5177e4/tiffany-0.6.5.tar.gz" } ], "0.6.6": [ { "comment_text": "", "digests": { "md5": "c851dfb3253658121ec1e05cbd090671", "sha256": "d356ededef27d6c4681069c94539eee6b5e86272000ea5c6237fc68ba482b261" }, "downloads": -1, "filename": "tiffany-0.6.6-py2-none-any.whl", "has_sig": false, "md5_digest": "c851dfb3253658121ec1e05cbd090671", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 201892, "upload_time": "2015-01-28T18:33:56", "url": "https://files.pythonhosted.org/packages/bf/f6/e9569e007301ee79c31a984f5e41f8bf59052ccb6e5c1de9cdfbb6d749cb/tiffany-0.6.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "11d60fb8e90fdd810723c4cea02a4211", "sha256": "4eb17edf3dd2966e83be4364e92a26683eeed2f1d17ba76c1387fcea939acf8d" }, "downloads": -1, "filename": "tiffany-0.6.6-py3-none-any.whl", "has_sig": false, "md5_digest": "11d60fb8e90fdd810723c4cea02a4211", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 201898, "upload_time": "2015-01-28T18:28:47", "url": "https://files.pythonhosted.org/packages/35/41/6c84aee36c5ffdac02a4b866d2917167395ecb9c7453597093608416f3ff/tiffany-0.6.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd75acb24a522685c06167420ac2719b", "sha256": "c33ab2753d349ca3e1d2ca86adac64dff843b01d755a2f731143747b98e916e3" }, "downloads": -1, "filename": "tiffany-0.6.6.tar.gz", "has_sig": false, "md5_digest": "bd75acb24a522685c06167420ac2719b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 197350, "upload_time": "2015-01-28T18:28:44", "url": "https://files.pythonhosted.org/packages/72/95/447407f88b899a109c864771b95ae6c47ddb562184d5f3958221312ccce2/tiffany-0.6.6.tar.gz" } ], "0.6.7": [ { "comment_text": "", "digests": { "md5": "f7acf0a7f4937a9830eacbd2c77b6fbe", "sha256": "81d39b7fd9c834b7f4b5bec163ce23a41d2c88e9cfbe604cc2db7728b280e5db" }, "downloads": -1, "filename": "tiffany-0.6.7-py2-none-any.whl", "has_sig": false, "md5_digest": "f7acf0a7f4937a9830eacbd2c77b6fbe", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 201963, "upload_time": "2015-01-28T20:19:13", "url": "https://files.pythonhosted.org/packages/49/cf/b9d71db83f162c3db9c5ee5199be50f7ef96e9ef3fb9c8129dc1e4813315/tiffany-0.6.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd50446467d70f672715f0fc0a6c4b2b", "sha256": "6c4172893b8924fd5e29754f35e79a1f13b9817d5a632270ebf5e1b7fac9d954" }, "downloads": -1, "filename": "tiffany-0.6.7-py3-none-any.whl", "has_sig": false, "md5_digest": "cd50446467d70f672715f0fc0a6c4b2b", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 201970, "upload_time": "2015-01-28T20:19:33", "url": "https://files.pythonhosted.org/packages/ff/22/ec7f90444df5c8454a2f74d9123dcfe73aac9b0b4bcbe3cd3644867fe6e7/tiffany-0.6.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "868044f27a92262f1ab3d4d2028a1773", "sha256": "cc1397030989be5ad5a87fb744c0e38bfa31c017cd2ba48713127403f201f5f3" }, "downloads": -1, "filename": "tiffany-0.6.7.tar.gz", "has_sig": false, "md5_digest": "868044f27a92262f1ab3d4d2028a1773", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 197438, "upload_time": "2015-01-28T20:19:29", "url": "https://files.pythonhosted.org/packages/36/26/411152b86429dfd4cac373e15862641d0b10146a370b7bc8db5fcabed379/tiffany-0.6.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f7acf0a7f4937a9830eacbd2c77b6fbe", "sha256": "81d39b7fd9c834b7f4b5bec163ce23a41d2c88e9cfbe604cc2db7728b280e5db" }, "downloads": -1, "filename": "tiffany-0.6.7-py2-none-any.whl", "has_sig": false, "md5_digest": "f7acf0a7f4937a9830eacbd2c77b6fbe", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 201963, "upload_time": "2015-01-28T20:19:13", "url": "https://files.pythonhosted.org/packages/49/cf/b9d71db83f162c3db9c5ee5199be50f7ef96e9ef3fb9c8129dc1e4813315/tiffany-0.6.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd50446467d70f672715f0fc0a6c4b2b", "sha256": "6c4172893b8924fd5e29754f35e79a1f13b9817d5a632270ebf5e1b7fac9d954" }, "downloads": -1, "filename": "tiffany-0.6.7-py3-none-any.whl", "has_sig": false, "md5_digest": "cd50446467d70f672715f0fc0a6c4b2b", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 201970, "upload_time": "2015-01-28T20:19:33", "url": "https://files.pythonhosted.org/packages/ff/22/ec7f90444df5c8454a2f74d9123dcfe73aac9b0b4bcbe3cd3644867fe6e7/tiffany-0.6.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "868044f27a92262f1ab3d4d2028a1773", "sha256": "cc1397030989be5ad5a87fb744c0e38bfa31c017cd2ba48713127403f201f5f3" }, "downloads": -1, "filename": "tiffany-0.6.7.tar.gz", "has_sig": false, "md5_digest": "868044f27a92262f1ab3d4d2028a1773", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 197438, "upload_time": "2015-01-28T20:19:29", "url": "https://files.pythonhosted.org/packages/36/26/411152b86429dfd4cac373e15862641d0b10146a370b7bc8db5fcabed379/tiffany-0.6.7.tar.gz" } ] }