Skip to main content

Primify

Transform any image into a prime number that looks like the image if glanced upon from far away.

result Build Status

How does it work

We proceed in 5 steps:

  1. We resize the image to contain at most a --max-digits amount of pixels.

  2. Run various image processing steps like edge enhancement and smoothing before converting the image into grey-scale.

  3. We then quantise the image into just having 5 to 10 greyness levels.

  4. Now we map each greyness level to a digit, et voila, we have embedded the picture into a number.

  5. It now remains to tweak some of the digits until we find a prime number that still looks like the image.

Note: According to the prime number theorem, the density of prime numbers is asymptotically of order 1/log(n). Hence, if we have some number n with m digits, the number of primality tests that we expect to do until we hit a prime number is roughly proportional to m. Since we use the Baillie–PSW primality test, the overall expected computational complexity of our prime searching procedure is O(n*log(n)³).

How to use

Simply get the primify command line tool via pip install primify. You can also import the PrimeImage class from primify.base or use cli.py as a command-line script.

Command-line tool

usage: primify [-h] [--image IMAGE_PATH] [--max-digits MAX_DIGITS]
               [--output-file OUTPUT_FILE]

Command-line tool for converting images to primes

optional arguments:
  -h, --help            show this help message and exit
  --image IMAGE_PATH, -i IMAGE_PATH
                        Source image to be converted
  --max-digits MAX_DIGITS, -d MAX_DIGITS
                        Maximal number of digits the prime can have
  --output-file OUTPUT_FILE, -o OUTPUT_FILE
                        File name of the file containing the prime.

Made by Levi B.

Thus, if you have the source image at ./source.png and you want to convert it into a prime contained in ./prime.txt which has at most 5000 digits. Then you should run:

primify -v --image ./source.png --max-digits 5000 --output-file prime.txt

Importing the PrimeImage class

You can also simply import the PrimeImage class from primify.base and use that class in your own code. Check the documentation for details on how to interact with the underlying API.

Additional Material

Daniel Temkin wrote a lovely article on his blog esoteric.codes giving some interesting insight and background for this tool. You can read it here.

Release files for primify 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for primify 2.0.0
File Interpreter ABI Platform
primify-2.0.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Release files / primify-2.0.0-py2.py3-none-any.whl

Download URL primify-2.0.0-py2.py3-none-any.whl
Size 8.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
119fef92135f99460782064869653926e5d73d765f7336005ed96bd729092f06
BLAKE2b-256 checksum
How to use checksums
9f3489ab67b2f2e4cbf214c8bdfa743da4eb23c19ae918de582f8e84933c762d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.5

Release history Release notifications | RSS feed

This release

2.0.0 This release

1 release file

1.0.2

1 release file

1.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page