Embed any image into a prime number.
Transform any image into a prime number that looks like the image if glanced upon from far away.
How does it work
We proceed in 5 steps:
We resize the image to contain at most a
--max-digitsamount of pixels.
Run various image processing steps like edge enhancement and smoothing before converting the image into grey-scale.
We then quantise the image into just having 5 to 10 greyness levels.
Now we map each greyness level to a digit, et voila, we have embedded the picture into a number.
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.
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.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for primify-2.0.0-py2.py3-none-any.whl