{ "info": { "author": "John Cupitt", "author_email": "jcupitt@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Multimedia :: Graphics", "Topic :: Multimedia :: Graphics :: Graphics Conversion" ], "description": "README\n======\n\n.. image:: https://travis-ci.org/libvips/pyvips.svg?branch=master\n :alt: Build Status\n :target: https://travis-ci.org/libvips/pyvips\n\nPyPI package:\n\nhttps://pypi.python.org/pypi/pyvips\n\nThis module wraps the libvips image processing library. \n\nhttps://libvips.github.io/libvips/\n\nIf you have the development headers for libvips installed and have a working C\ncompiler, this module will use cffi API mode to try to build a libvips \nbinary extension for your Python. \n\nIf it is unable to build a binary extension, it will use cffi ABI mode\ninstead and only needs the libvips shared library. This takes longer to\nstart up and is typically ~20% slower in execution. You can find out how\npyvips installed with ``pip show pyvips``.\n\nThis binding passes the vips test suite cleanly and with no leaks under\npython2.7 - python3.6, pypy and pypy3 on Windows, macOS and Linux. \n\nWe have formatted docs online here:\n\nhttps://libvips.github.io/pyvips/\n\nHow it works\n------------\n\nPrograms that use ``pyvips`` don't manipulate images directly, instead\nthey create pipelines of image processing operations building on a source\nimage. When the end of the pipe is connected to a destination, the whole\npipeline executes at once, streaming the image in parallel from source to\ndestination a section at a time.\n\nBecause ``pyvips`` is parallel, it's quick, and because it doesn't need to\nkeep entire images in memory, it's light. For example, the libvips \nspeed and memory use benchmark: \n\nhttps://github.com/libvips/libvips/wiki/Speed-and-memory-use\n\nLoads a large tiff image, shrinks by 10%, sharpens, and saves again. On this\ntest ``pyvips`` is typically 3x faster than ImageMagick and needs 5x less\nmemory. \n\nThere's a handy chapter in the docs explaining how libvips opens files,\nwhich gives some more background.\n\nhttp://libvips.github.io/libvips/API/current/How-it-opens-files.md.html\n\nInstall libvips\n---------------\n\nYou need the libvips shared library on your library search path, version 8.2 or\nlater. On Linux and macOS, you can just install via your package manager; on \nWindows you can download a pre-compiled binary from the libvips website.\n\nhttps://libvips.github.io/libvips/install.html\n\nInstall pyvips\n--------------\n\nNext, install this package, perhaps::\n\n $ pip install --user pyvips\n\nOn Windows, you'll need a 64-bit Python. The official one works well. Anaconda\nprobably won't work without some effort -- they have their own packaging\nsystem.\n\nExtra notes for Windows\n-----------------------\n\nOn Windows, you will need to add `vips-dev-x.y\\bin` to your `PATH` so\nthat pyvips can find all the DLLs it needs. You can either do this in the\n**Advanced System Settings** control panel, or you can just change\n`PATH` for your pyvips program.\n\nIf you set the PATH environment variable in the control panel, you can use\nthe `vips` command-line tools, which I find useful. However, this will add\na lot of extra DLLs to your search path and they might conflict with other\nprograms, so it's usually safer just to set `PATH` in your program.\n\nTo set `PATH` from within Python, you need something like this at the start of\nyour program::\n\n import os\n vipshome = 'c:\\\\vips-dev-8.7\\\\bin'\n os.environ['PATH'] = vipshome + ';' + os.environ['PATH']\n\nNow when you import pyvips, it should be able to find the DLLs.\n\nTest your install\n-----------------\n\nTry this test program::\n\n import logging; logging.basicConfig(level = logging.DEBUG)\n import pyvips\n\nIf pyvips was able to build and use a binary module on your computer (API\nmode) you should see::\n\n $ ./pyv.py \n DEBUG:pyvips:Loaded binary module _libvips\n DEBUG:pyvips:Inited libvips\n\nIf the build failed (fallback to ABI mode), or there was a header or version\nmismatch, you might see::\n\n $ ./pyv.py \n DEBUG:pyvips:Loaded binary module _libvips\n DEBUG:pyvips:Binary module load failed: not all arguments converted during string formatting\n DEBUG:pyvips:Falling back to ABI mode\n DEBUG:pyvips:Loaded lib \n DEBUG:pyvips:Loaded lib \n DEBUG:pyvips:Inited libvips\n\npyvips will work fine in this fallback mode, it's just a bit slower. \n\nIf API mode stops working, you can fix it by reinstalling pyvips. You should\nmake sure pip is not reusing a cached wheel, e.g. by using ``pip install\n--no-cache-dir pyvips``.\n\nExample\n-------\n\nThis sample program loads a JPG image, doubles the value of every green pixel,\nsharpens, and then writes the image back to the filesystem again::\n\n import pyvips\n\n image = pyvips.Image.new_from_file('some-image.jpg', access='sequential')\n image *= [1, 2, 1]\n mask = pyvips.Image.new_from_array([[-1, -1, -1],\n [-1, 16, -1],\n [-1, -1, -1]\n ], scale=8)\n image = image.conv(mask, precision='integer')\n image.write_to_file('x.jpg')\n\nConverting old code\n-------------------\n\nTo convert old code, replace the lines::\n\n import gi\n gi.require_version('Vips', '8.0')\n from gi.repository import Vips \n\nwith::\n\n import pyvips\n Vips = pyvips\n\nInstead of the ``pyvips = Vips``, you can of course also swap all ``Vips`` for\n``pyvips`` with eg.::\n\n %s/Vips/pyvips/g\n\nBackground\n----------\n\nThe Python binding included in libvips works, but porting and installation\nare more difficult than they should be. \n\nThis new binding is:\n\n* compatible with the current Python binding (it runs the same test suite,\n unmodified)\n\n* easier to install, since the stack is much smaller, and there are \n no issues with the overrides directory\n\n* faster, since we implement Buffer and save some copies\n\n* faster, since it is \"thinner\". The ffi Ruby binding is about twice\n as fast as the gobject-introspection one, when running the test suite\n\n* portable across CPython, PyPy and others\n\n* more simply portable to Windows \n\n* easy to package for pip\n\nNotes\n-----\n\nLocal user install::\n\n $ pip install --user -e .\n $ pip3 install --user -e .\n $ pypy -m pip --user -e .\n\nRun all tests::\n\n $ tox \n\nRun test suite::\n\n $ tox test\n\nRun a specific test::\n\n $ pytest tests/test_conversion.py\n\nStylecheck::\n\n $ tox qa\n\nGenerate HTML docs in ``doc/build/html``::\n\n $ cd doc; sphinx-build -bhtml . build/html\n\nRegenerate autodocs::\n\n $ cd doc; \\\n python -c \"import pyvips; pyvips.Operation.generate_sphinx_all()\" > x \n\nAnd copy-paste ``x`` into the obvious place in ``doc/vimage.rst``.\n\nUpdate version number::\n\n $ vi pyvips/version.py\n $ vi doc/conf.py\n\nUpdate pypi package::\n\n $ python setup.py sdist\n $ twine upload dist/*", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/libvips/pyvips", "keywords": "image processing", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyvips", "package_url": "https://pypi.org/project/pyvips/", "platform": "", "project_url": "https://pypi.org/project/pyvips/", "project_urls": { "Homepage": "https://github.com/libvips/pyvips" }, "release_url": "https://pypi.org/project/pyvips/2.1.8/", "requires_dist": null, "requires_python": "", "summary": "binding for the libvips image processing library, API mode", "version": "2.1.8" }, "last_serial": 5473177, "releases": { "2.0.0": [ { "comment_text": "", "digests": { "md5": "da3a980e702b834e76349922d93020bf", "sha256": "c99590364cfc620af0db004aa9c6e6830a3c337d0db074d0a61da74dd4b91071" }, "downloads": -1, "filename": "pyvips-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da3a980e702b834e76349922d93020bf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 55947, "upload_time": "2017-08-19T14:29:05", "url": "https://files.pythonhosted.org/packages/6a/2d/5ca1ee5077f733335c208b7a3f3d62f964aaab87731ab3e2850e404df7f1/pyvips-2.0.0-py2.py3-none-any.whl" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "de8d2d8de6410441109a8b246805fccd", "sha256": "bf74b25a91bed8d9a96be8d457ce26ee487bf8b72c48f2c56aa643e233e341b2" }, "downloads": -1, "filename": "pyvips-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "de8d2d8de6410441109a8b246805fccd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 56493, "upload_time": "2017-08-23T17:53:13", "url": "https://files.pythonhosted.org/packages/40/99/2d9991eff005de6674f155808423e8aac934ba50b5c8858abef5e148c51f/pyvips-2.0.1-py2.py3-none-any.whl" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "e7e9ae205e49065fb283a16c210c8a9d", "sha256": "e6a6541672c6eab62ab8442738742b021c624a7b51b49c1ba9ab9aa99935692f" }, "downloads": -1, "filename": "pyvips-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7e9ae205e49065fb283a16c210c8a9d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 57433, "upload_time": "2017-08-31T14:20:45", "url": "https://files.pythonhosted.org/packages/b6/3a/261808544f6832f6e00b6ee26435210d6293cc022b9c51e2b48543575dc5/pyvips-2.0.2-py2.py3-none-any.whl" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "15673d6469881cc718b385e8d849c9f8", "sha256": "0939c390af4584d2a48d488630f0f249d234e6087b188f7e8a70418479b66488" }, "downloads": -1, "filename": "pyvips-2.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "15673d6469881cc718b385e8d849c9f8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 57910, "upload_time": "2017-09-02T14:43:45", "url": "https://files.pythonhosted.org/packages/62/32/bd01d86b81fdd84c0699cda1c40b0334f63e4deb981d22f468b3ef681513/pyvips-2.0.3-py2.py3-none-any.whl" } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "868a4d41517c8c18d80a856931485caa", "sha256": "f1b502e20d3b12abf295a2eb57387061b3285b6f93a228a1c0beada01a2e435d" }, "downloads": -1, "filename": "pyvips-2.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "868a4d41517c8c18d80a856931485caa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 58200, "upload_time": "2017-09-07T21:16:48", "url": "https://files.pythonhosted.org/packages/47/1f/a646ed24baab8404d7ce485e088bd58ec2ec4e9108089dffa6acf42b6347/pyvips-2.0.4-py2.py3-none-any.whl" } ], "2.0.5": [ { "comment_text": "", "digests": { "md5": "5cef1fdb50a7621069eae86d965a5200", "sha256": "684a459452b1b1968c7c8dbd636cdb669f780e9927291dc469a25c751e9337be" }, "downloads": -1, "filename": "pyvips-2.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5cef1fdb50a7621069eae86d965a5200", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31412, "upload_time": "2018-02-01T14:12:38", "url": "https://files.pythonhosted.org/packages/17/08/9314ee0082c56aeac9dbbc23f5948e1e884ac9679cf6032197d5be34fa56/pyvips-2.0.5-py2.py3-none-any.whl" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "69cbe9cfe11f439754ba44ad6bca4248", "sha256": "eec805bba1de3bcaedf855a5696c85ca550896785e1fdf96ef7021248850b618" }, "downloads": -1, "filename": "pyvips-2.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "69cbe9cfe11f439754ba44ad6bca4248", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34213, "upload_time": "2018-02-23T12:23:12", "url": "https://files.pythonhosted.org/packages/b5/74/5c963d0dcc76fb467902e18aab55500158f5c9acdc86235061a878c16376/pyvips-2.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3032d613f6bd1f96fd2ad9428c40d487", "sha256": "4196e80ef03ca7efff21f00866e1302c5e90d45a8d9d87f3e5b122a1ba04ced2" }, "downloads": -1, "filename": "pyvips-2.1.0.tar.gz", "has_sig": false, "md5_digest": "3032d613f6bd1f96fd2ad9428c40d487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30589, "upload_time": "2018-02-25T10:32:56", "url": "https://files.pythonhosted.org/packages/a0/32/f819aa0de7394b4d714fece744bde53ee82df5e545e4c5affb17563bdfcd/pyvips-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "889dbf8dcd4f4e505ff06504a1960619", "sha256": "034210a7bfdbe574e07f71c96ca8cca3cc6072a5460032dad2794d8e75bd43dc" }, "downloads": -1, "filename": "pyvips-2.1.1.tar.gz", "has_sig": false, "md5_digest": "889dbf8dcd4f4e505ff06504a1960619", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30738, "upload_time": "2018-02-25T10:44:38", "url": "https://files.pythonhosted.org/packages/c2/42/dbb88d6049ec0cdd5aa62070019d50a9381cb390dd5e68ab3c062b0a5260/pyvips-2.1.1.tar.gz" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "cb5867a3116d28e325586c551f21275f", "sha256": "c9de58aa073194e85ea0b8e90cb6b6a22905293c5c53d030424bec40dbe281ad" }, "downloads": -1, "filename": "pyvips-2.1.2.tar.gz", "has_sig": false, "md5_digest": "cb5867a3116d28e325586c551f21275f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31235, "upload_time": "2018-03-02T07:19:40", "url": "https://files.pythonhosted.org/packages/5c/6e/df4a34a9c8b349e40d6400bd4ac40558b3497732795fa0399596155b18b1/pyvips-2.1.2.tar.gz" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "765c112395294520b5701e6bcacf68dd", "sha256": "223bb78753866c604a9918d89b53b5dd7b6102c5302c6672f0c4cb047c4c15f2" }, "downloads": -1, "filename": "pyvips-2.1.3.tar.gz", "has_sig": false, "md5_digest": "765c112395294520b5701e6bcacf68dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29358, "upload_time": "2018-08-06T15:44:18", "url": "https://files.pythonhosted.org/packages/60/fb/820d471aa27cea5c11e752579cf11308adcfbd18558f509e7a7a5d7f229b/pyvips-2.1.3.tar.gz" } ], "2.1.4": [ { "comment_text": "", "digests": { "md5": "6f2b99601178a533866a3fc3ce815ef4", "sha256": "4fb56ab9f30baa1d1103e488e368e60387a936dc9682b2456327bbfa2dc00a55" }, "downloads": -1, "filename": "pyvips-2.1.4.tar.gz", "has_sig": false, "md5_digest": "6f2b99601178a533866a3fc3ce815ef4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29238, "upload_time": "2018-10-03T13:39:56", "url": "https://files.pythonhosted.org/packages/b3/55/abb37dfddb4907b00b0e55b85cda090aa0704f9a587d62b925b0238e898c/pyvips-2.1.4.tar.gz" } ], "2.1.5": [ { "comment_text": "", "digests": { "md5": "e73021d71dad7fa304f5f4041c83b88c", "sha256": "42dfbf14f19374bef7db89f3943758deec3dc055c026ff9ae5fbd09a7cb1c0e3" }, "downloads": -1, "filename": "pyvips-2.1.5.tar.gz", "has_sig": false, "md5_digest": "e73021d71dad7fa304f5f4041c83b88c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30236, "upload_time": "2018-12-18T17:02:30", "url": "https://files.pythonhosted.org/packages/39/1e/b1df477d78bba37d3b9f83258e9a44bb505355e2e56a82e8398bfe699096/pyvips-2.1.5.tar.gz" } ], "2.1.6": [ { "comment_text": "", "digests": { "md5": "e7766b35ee6e54b98fa92448c0d214c7", "sha256": "36d41051da83a87ff0becf98c34f6e72921f64f0c3a6e0f180bae267e4d87a73" }, "downloads": -1, "filename": "pyvips-2.1.6.tar.gz", "has_sig": false, "md5_digest": "e7766b35ee6e54b98fa92448c0d214c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34372, "upload_time": "2019-05-18T09:02:33", "url": "https://files.pythonhosted.org/packages/ae/dd/8a223ac12ed4cc5bfe85b81503683bcf4c49804f176cebe13ff28ee88ce3/pyvips-2.1.6.tar.gz" } ], "2.1.7": [ { "comment_text": "", "digests": { "md5": "aa73cb6b45ab7971295d9f814cd6c04e", "sha256": "41e7c514ab4458b385ff5d4e15b5954ea260d58b6e5773e639ed7187d5a15f58" }, "downloads": -1, "filename": "pyvips-2.1.7.tar.gz", "has_sig": false, "md5_digest": "aa73cb6b45ab7971295d9f814cd6c04e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34367, "upload_time": "2019-07-01T17:30:24", "url": "https://files.pythonhosted.org/packages/fe/dd/49b514c7a05343677946999b7ab1c63947b68546a12ca62d0d15d1473945/pyvips-2.1.7.tar.gz" } ], "2.1.8": [ { "comment_text": "", "digests": { "md5": "c18976f5fa6587f940dce0772cd7caa1", "sha256": "8992acde85331c08bf4cd0b8213d99bc65c523fc67eade93820d600de138ad04" }, "downloads": -1, "filename": "pyvips-2.1.8.tar.gz", "has_sig": false, "md5_digest": "c18976f5fa6587f940dce0772cd7caa1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34356, "upload_time": "2019-07-01T19:52:56", "url": "https://files.pythonhosted.org/packages/07/b1/16e181d3c2d5fa0d009fb73e332a5c5ed2340d48af3ef060edcbd2992f46/pyvips-2.1.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c18976f5fa6587f940dce0772cd7caa1", "sha256": "8992acde85331c08bf4cd0b8213d99bc65c523fc67eade93820d600de138ad04" }, "downloads": -1, "filename": "pyvips-2.1.8.tar.gz", "has_sig": false, "md5_digest": "c18976f5fa6587f940dce0772cd7caa1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34356, "upload_time": "2019-07-01T19:52:56", "url": "https://files.pythonhosted.org/packages/07/b1/16e181d3c2d5fa0d009fb73e332a5c5ed2340d48af3ef060edcbd2992f46/pyvips-2.1.8.tar.gz" } ] }