Pack a set of rectangles into a bounding box with minimum area
Project description
Pack a set of rectangles into a bounding box with minimum area
Welcome to rectangle-packer
Primary use: Given a set of rectangles with fixed orientations, find a bounding box of minimum area that contains them all with no overlap.
This project is inspired by Matt Perdeck’s blog post Fast Optimizing Rectangle Packing Algorithm for Building CSS Sprites.
The latest documentation is available on Read the Docs.
The source code is available on GitHub.
Installation
Install latest version from PyPI:
$ python3 -m pip install rectangle-packer
Or clone the repository and install with:
$ python3 setup.py install
Basic usage
# Import the module
>>> import rpack
# Create a bunch of rectangles (width, height)
>>> sizes = [(58, 206), (231, 176), (35, 113), (46, 109)]
# Pack
>>> positions = rpack.pack(sizes)
# The result will be a list of (x, y) positions:
>>> positions
[(0, 0), (58, 0), (289, 0), (289, 113)]
The output positions are the lower left corner coordinates of each rectangle in the input.
These positions will yield a packing with no overlaps and enclosing area as small as possible (best effort).
Examples
Example A:
Example B:
Example C: Sometimes the input rectangles simply cannot be packed in a good way. Here is an example of low packing density:
Example D: The image below is contributed by Paul Brodersen, and illustrates a solution to a problem discussed at stackoverflow.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for rectangle_packer-2.0.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | acc5a6ad8d54a453de9b170f389b5b8f775f9466f006021fd31a1939d123aa91 |
|
MD5 | 957085dd5a9f1921b91e32c9e4becc79 |
|
BLAKE2b-256 | 445cbb7d286018fc6c67b8a9a2e444bf0020607652948d718c82cf4d85edfe61 |
Hashes for rectangle_packer-2.0.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bdcc586e2a836921b2b51a0938a623cf346184741d1cf93e7eb05bfdc7db657 |
|
MD5 | d0951b507e2e3d4c9e70930a4f88461b |
|
BLAKE2b-256 | 348f5e9f48abd7e41d786acf3911e86cb7c1e92c5840df9a53ecb0ba1445ef4e |
Hashes for rectangle_packer-2.0.0-cp39-cp39-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a35d77c30d17439eea734f0b8c63f989118820aa267b47e5535265d1fdd0213d |
|
MD5 | 61e157316d04646833066aa392043ef1 |
|
BLAKE2b-256 | e86825d15495eb5363ff74cd0efa4e8ec3d93c29d5f6b1430d06d73d1793e2d1 |
Hashes for rectangle_packer-2.0.0-cp39-cp39-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 07bd165badc878a15b34e8c82f8b4a3c1256be5fc4fce66720a43c859622fac6 |
|
MD5 | 589bbe66710ac0e644e0b9674e992f31 |
|
BLAKE2b-256 | 279dd207b838bbee1028b4b483f199b170639672b4edd909ab3232fe2115a06b |
Hashes for rectangle_packer-2.0.0-cp39-cp39-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3f6801b0e24ea6ca51500c81656fe68417f61f07ca86d574b403b7654308371 |
|
MD5 | eeda0d1fd5d43e5fae96e487f485ed4c |
|
BLAKE2b-256 | 94081905e1d3ccd5bea4d800a86f277b1cb932de9785da3b892e1db43fa6d555 |
Hashes for rectangle_packer-2.0.0-cp39-cp39-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8f7c28dd3475891dcfc4c94aeb186ecf9869f6c394a793669ca1a3d1e7c467b |
|
MD5 | b08997e0ae1c356349be7a21fd65155d |
|
BLAKE2b-256 | c23cce9b796998150443bea8c1cdfebc03ff8cd8e03139e520f84c2fec389113 |
Hashes for rectangle_packer-2.0.0-cp39-cp39-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9b36fed297d2a11633ee03b2829be687cb68127c730efc4816793e26c27495a |
|
MD5 | a5c6e70fc79b92c79c3bab0a43cb0833 |
|
BLAKE2b-256 | 05b3f86410ce7f1c76b3dd8e4f0da774f1ea29e85472cb7ec191a49303377bf0 |
Hashes for rectangle_packer-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7d396dd4431730c2be63bba8963fdc4d442a391a7d8911e4e90da0ec2b4adda |
|
MD5 | 610fcd998aa0061d75512f2db2b58e3a |
|
BLAKE2b-256 | b96cd84cf43e45b233a38d19f5e88509f8dba8e656024612da28eb46d5f77baf |
Hashes for rectangle_packer-2.0.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4798ec70a89c13afd3540df8f4cf8e5c5c152137f8d4d07d8bdd87e50195047a |
|
MD5 | 89b824acf5fac8ed44df724d762769cf |
|
BLAKE2b-256 | 451c547dcb7dd3be5d98b18638f5b9c476c85afbe059bca13db4f14c96a56711 |
Hashes for rectangle_packer-2.0.0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b66a3a326a783909fa34bd9a4edf33214cf3c825737a31c7e3385f43a8fbffd6 |
|
MD5 | 803c2d6d3f1477b785b9d9e90232f83f |
|
BLAKE2b-256 | 9b1189bc941647380caad8f78a7c7d378fc9462798d663b81d8e695330c9c10d |
Hashes for rectangle_packer-2.0.0-cp38-cp38-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71a6e17f7067e59599177a2c79cf135b79caa56eac758e0c3fadf0527a7c6a94 |
|
MD5 | 350d6185dbd5861b4174d767508a1716 |
|
BLAKE2b-256 | 8af14f8419a04b9089008199dd8ce9d336975e61917d63168741b3ef185a540e |
Hashes for rectangle_packer-2.0.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98832d26a6457fb58fba75db5a6f3a56f870f631719fec1d3fb73fc4a3b31d11 |
|
MD5 | c93090b2ad5bc48bf6978b17977d45d5 |
|
BLAKE2b-256 | 0192fcc2d8c395759eb79df285d2247d5d287c02a707f238b14497065822d6e3 |
Hashes for rectangle_packer-2.0.0-cp38-cp38-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce5b4727ab4f9fd7305ecc05b5f9c57f8317632018cea1499c3fd9840e8d1d32 |
|
MD5 | e2983eab81a04a518d7d41a5b2c19fdc |
|
BLAKE2b-256 | 0f946ca6d16e94eddc949de8d98b3ca315d0d66de9fe3074e536ed687dd02712 |
Hashes for rectangle_packer-2.0.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 05c3f7f880a226d37e4fe96bd8c82952583280953f7f3ed40b3f434daee7e1f2 |
|
MD5 | 2a02223ce60f226f86be6a09120e1045 |
|
BLAKE2b-256 | 22bbd1c0e3cd4579d064e6a64ea1e200889410bb71a99128888d6682f2ff4f23 |
Hashes for rectangle_packer-2.0.0-cp38-cp38-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd585e9cc7bbedd0f13d7b3b16c86515a7c142627a79c2b36b0c5d13984ff74c |
|
MD5 | 0b7b1de6a8649690f38296320e8129db |
|
BLAKE2b-256 | 697e6eab043f8f4746e43a80c413221a4531ada72740c0122570b7e4d343a8c7 |
Hashes for rectangle_packer-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f1495274fac20d37636695de83644fdc6bb27022e13732f837bbe2635b8a5e2 |
|
MD5 | ae7b356aebb97f868175146115ec028b |
|
BLAKE2b-256 | 0bf3b57eaca64e7c59894a0e6f48191044b3a31def0dd2b405ce7124d728b56b |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9766eb27d7437b27a703abf3c65195fad321f51ab05c2cc75a5d94a3432ad639 |
|
MD5 | 63db3e9a79ab97732a5923566da1e460 |
|
BLAKE2b-256 | b12643deb1da9d3e6588ee0d5d858a6129bd979190edd0fb3b758350e4488c4a |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8780adddc7fc0ff86af65bc93dcf2b06d3b08518893b7067c03275761e15a1f6 |
|
MD5 | 13bbb5798a12ffab3104cfad455e5d8f |
|
BLAKE2b-256 | 7d415bf0e233b8699b332a7167a1f789350eb034251a4660cbb8fd8da40e8ec4 |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c02603594d665a8f6ba7c06cfa136f28cd4e6629b689a869ab4e53da5fd095e6 |
|
MD5 | 76fff254aee95d5f1e15b6b9020276c3 |
|
BLAKE2b-256 | 647f881a7a760a50757627694077c31e8d9a97d08487203676d3fdf595d92de9 |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb2718ae66637505d5e236149d39be13134d215b2db2096c9100bc4ea8b18e85 |
|
MD5 | decc95fecfbcc28e4191d033d4dc160d |
|
BLAKE2b-256 | aa3ebf9cc9ab80609b1693f9ef455d0bcb16039bcf156405feb6d30dd961db60 |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97e7ab891c6d73f738532c40648a30eb3951c561e1b90ad7d5f2241008fb86d4 |
|
MD5 | 3f01afa32b698837ddca7f450db21e78 |
|
BLAKE2b-256 | c941ceff0453140ef8d107d6d5237f6195952efd217abb4da7601e373b292ddf |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46a665c99842a4c2a43b8c7b1d486a9138a261cf8ade6a9efaf3ecb869579d3a |
|
MD5 | 974195c91f1742fc1b560a24c323f99c |
|
BLAKE2b-256 | db6deb9c51efde63bed17f7c412ff48cc6741299bd03691d9786cfd95f4ec756 |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bf19a1101c3c5764ff4cedc5fd632e5cf2f49a2458851f75ad3c937eb50cb8e |
|
MD5 | 03977713625ef7fe540ce63b9f63c229 |
|
BLAKE2b-256 | 5e60ab66f92e956f01b2c4bc51383556475f9fd97c0bbaf47494a8cdffc6485d |
Hashes for rectangle_packer-2.0.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b62321d8d0357957353e087b93886729712864399ec4ae8bd45a125955d8e78 |
|
MD5 | 12b8b14c0fb758c493d55947a3ed6ede |
|
BLAKE2b-256 | 9a2edfd9563e2b8f55bf12e06b35f50d848d831c1cfcf7d571ee8cdef2f2b28b |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0cdf8fcf1e4f1c287aabd65c5ba1bb8d8726671b64b51389ae978c4f0a89e037 |
|
MD5 | 5d0f9e26e05055671079e0069ec42a1b |
|
BLAKE2b-256 | c07144cf62f41ca0d3266a5e16842344f10c4468e1bdca97ffe590891754c6ef |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c288d964fddd87358c969dffd82f009939e37fa23bef6ff3aa43217baf510990 |
|
MD5 | 225bf74309a3dd22aee4762dfb392a13 |
|
BLAKE2b-256 | d143078e3806e9ef644dbbfe062195a4535822cd3bd7135f7e29474fd7d249f5 |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a930a683303608d052fd63c6601bf532becddbb1f3bcfc258a69a3fb74092463 |
|
MD5 | bf31ec3690d973c8af0ad46337e631dd |
|
BLAKE2b-256 | 8f96ba77e629156c1997a8c032b90da4add1b79ab18d376c2522ada73049cd99 |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89764aa1a6dfdb049d975cb32c53df77cd101164a06e916df7017fe00de87c48 |
|
MD5 | f7fe3652430d439486da8237cd3a3f1f |
|
BLAKE2b-256 | 77ccc4bed3a4b2bf98026051fb6237fe32c2646a9e3b6adaf1d704dec38c3879 |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb6b8a7cec08ce6d7db2d6bfa962b4cf4ebcddbe0827de8973fcd5da29fb1f5a |
|
MD5 | 9d431fcf5b071c17037b5e6e3a997a96 |
|
BLAKE2b-256 | f6f4c4a67dc2307f6016d1ef61cc1f4eaa565e1cb7f1d0e4edbd2bfdbfd6bed6 |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d90e8f0aec54c219f2af8f96d3a886051d7c3e434d013b298f306d26462fc794 |
|
MD5 | b839137ff056173d8c209f84a07e7589 |
|
BLAKE2b-256 | e0988dc5367a8d6b490db4fbcf08594a9ce941bdbccbd3514ac301faf830f84c |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef56af7bc194da364b2e6aaf524790aaaaa7cfe450d2c846ad909f927ae0da5d |
|
MD5 | 24c9e779b23c525836f36fd0de0b1ef9 |
|
BLAKE2b-256 | 3c4fc01b5eb5e91debfd830cb333307e3b256e0273727d8517f4915da948e60a |
Hashes for rectangle_packer-2.0.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa36fa00c6f73319ac65575a4162bfbc7bdc755b878b3827587cb7be5296faef |
|
MD5 | 602d322dedbb06f1d8a2732d4ed273df |
|
BLAKE2b-256 | 2b4d33af91b905bc89e63688a7daa44bae617cc90f90c1c1c35c946184a463cd |