Metadata-Version: 2.1
Name: primify
Version: 2.0.0
Summary: Embed any image into a prime number.
Home-page: https://github.com/LeviBorodenko/primify
Author: Levi Borodenko
Author-email: Levi.borodenko@gmail.com
License: mit
Project-URL: Documentation, https://github.com/LeviBorodenko/primify
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Requires-Python: >=3.8
Description-Content-Type: text/markdown; charset=UTF-8
License-File: LICENSE.txt
License-File: AUTHORS.rst
Requires-Dist: certifi (==2019.3.9)
Requires-Dist: mpmath (==1.1.0)
Requires-Dist: Pillow (==8.4.0)
Requires-Dist: sympy (==1.9)
Requires-Dist: gmpy2 (==2.1.1)
Requires-Dist: rich (==10.16.1)
Provides-Extra: testing
Requires-Dist: pytest ; extra == 'testing'
Requires-Dist: pytest-cov ; extra == 'testing'

# Primify

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

![result](https://i.imgur.com/UoMYkVS.png)
[![Build Status](https://travis-ci.org/joemccann/dillinger.svg?branch=master)](https://travis-ci.org/joemccann/dillinger)

## 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](https://primify.readthedocs.io/) for details on how to interact with the underlying API.

### Additional Material

[Daniel Temkin](http://danieltemkin.com/) wrote a lovely article on his blog [esoteric.codes](https://esoteric.codes) giving some interesting insight and background for this tool. You can read it [here](https://esoteric.codes/blog/primify).


