├── .devcontainer ├── Dockerfile └── devcontainer.json ├── .eslintrc.json ├── .github └── workflows │ ├── publish.yml │ └── tests.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── fitGradient.webp ├── getPalette.webp ├── lead-lossless.webp ├── logo.png └── logo.svg ├── examples ├── node-sharp │ ├── example.ts │ ├── package-lock.json │ ├── package.json │ ├── snapshots │ │ ├── fitGradientToImageData.json │ │ └── getPaletteFromImageData.json │ └── tsconfig.json ├── react │ ├── declarations.d.ts │ ├── image.jpg │ ├── index.css │ └── index.tsx └── testsuite │ ├── index.css │ ├── index.html │ ├── index.ts │ └── unsplash │ ├── resize.sh │ └── small │ ├── abed-ismail-fZXZ1-hbFrY-unsplash.jpg │ ├── amit-pritam-xO4a2U9jf00-unsplash.jpg │ ├── bob-brewer-s3dRFddp2lM-unsplash.jpg │ ├── clement-remond-n5hr-myI-Zo-unsplash.jpg │ ├── david-clode-zBORpP97apw-unsplash.jpg │ ├── enguerran-urban-NNfGpEadinQ-unsplash.jpg │ ├── index.json │ ├── jeremy-hynes-l_eSPV-eW8o-unsplash.jpg │ ├── jezael-melgoza-5zEAESyVMzM-unsplash.jpg │ ├── kevin-chinchilla-tqYpQothXHo-unsplash.jpg │ ├── nathalia-arantes-WYrvPSf0rlI-unsplash.jpg │ ├── parsa-mahmoudi-wTsaSE-U7qY-unsplash.jpg │ ├── sam-ueJJlc4Mclk-unsplash.jpg │ ├── shio-yang-WlEgMwnNlWY-unsplash.jpg │ ├── sincerely-media-tpgd1EpaaOE-unsplash.jpg │ └── thomas-millot-2JSLLwtM8MU-unsplash.jpg ├── jest.config.js ├── package.json ├── release.sh ├── scripts ├── benchmark.ts └── prepare.sh ├── src ├── __snapshots__ │ ├── clusterHistogram.test.ts.snap │ ├── getImageData.test.ts.snap │ ├── getPalette.test.ts.snap │ └── kmeans.test.ts.snap ├── clusterHistogram.test.ts ├── clusterHistogram.ts ├── color.ts ├── fitGradient.test.ts ├── fitGradient.ts ├── format.test.ts ├── format.ts ├── getImageData.test.ts ├── getImageData.ts ├── getPalette.test.ts ├── getPalette.ts ├── greedyClusterMerge.test.ts ├── greedyClusterMerge.ts ├── kmeans.test.ts ├── kmeans.ts ├── lab.test.ts ├── lab.ts ├── lib-jsdom.test.ts ├── lib.test.ts ├── lib.ts ├── linearRegression.test.ts ├── linearRegression.ts ├── test-helpers.ts ├── util.ts └── utils.test.ts ├── tests ├── endToEndTest.sh ├── image.jpg ├── node-module-compatibility │ ├── commonjs.js │ ├── esm.mjs │ └── package.json ├── puppeteer.ts └── snapshots │ └── testsuite.json ├── tsconfig-release.json ├── tsconfig.json └── webpack.config.js /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/.devcontainer/Dockerfile -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/.devcontainer/devcontainer.json -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/.eslintrc.json -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/.github/workflows/publish.yml -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/.github/workflows/tests.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/README.md -------------------------------------------------------------------------------- /docs/fitGradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/docs/fitGradient.webp -------------------------------------------------------------------------------- /docs/getPalette.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/docs/getPalette.webp -------------------------------------------------------------------------------- /docs/lead-lossless.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/docs/lead-lossless.webp -------------------------------------------------------------------------------- /docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/docs/logo.png -------------------------------------------------------------------------------- /docs/logo.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/docs/logo.svg -------------------------------------------------------------------------------- /examples/node-sharp/example.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/node-sharp/example.ts -------------------------------------------------------------------------------- /examples/node-sharp/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/node-sharp/package-lock.json -------------------------------------------------------------------------------- /examples/node-sharp/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/node-sharp/package.json -------------------------------------------------------------------------------- /examples/node-sharp/snapshots/fitGradientToImageData.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/node-sharp/snapshots/fitGradientToImageData.json -------------------------------------------------------------------------------- /examples/node-sharp/snapshots/getPaletteFromImageData.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/node-sharp/snapshots/getPaletteFromImageData.json -------------------------------------------------------------------------------- /examples/node-sharp/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/node-sharp/tsconfig.json -------------------------------------------------------------------------------- /examples/react/declarations.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.jpg'; 2 | -------------------------------------------------------------------------------- /examples/react/image.jpg: -------------------------------------------------------------------------------- 1 | ../testsuite/unsplash/small/abed-ismail-fZXZ1-hbFrY-unsplash.jpg -------------------------------------------------------------------------------- /examples/react/index.css: -------------------------------------------------------------------------------- 1 | .frame { 2 | text-align: center; 3 | } -------------------------------------------------------------------------------- /examples/react/index.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/react/index.tsx -------------------------------------------------------------------------------- /examples/testsuite/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/index.css -------------------------------------------------------------------------------- /examples/testsuite/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/index.html -------------------------------------------------------------------------------- /examples/testsuite/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/index.ts -------------------------------------------------------------------------------- /examples/testsuite/unsplash/resize.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/resize.sh -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/abed-ismail-fZXZ1-hbFrY-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/abed-ismail-fZXZ1-hbFrY-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/amit-pritam-xO4a2U9jf00-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/amit-pritam-xO4a2U9jf00-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/bob-brewer-s3dRFddp2lM-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/bob-brewer-s3dRFddp2lM-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/clement-remond-n5hr-myI-Zo-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/clement-remond-n5hr-myI-Zo-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/david-clode-zBORpP97apw-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/david-clode-zBORpP97apw-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/enguerran-urban-NNfGpEadinQ-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/enguerran-urban-NNfGpEadinQ-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/index.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/index.json -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/jeremy-hynes-l_eSPV-eW8o-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/jeremy-hynes-l_eSPV-eW8o-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/jezael-melgoza-5zEAESyVMzM-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/jezael-melgoza-5zEAESyVMzM-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/kevin-chinchilla-tqYpQothXHo-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/kevin-chinchilla-tqYpQothXHo-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/nathalia-arantes-WYrvPSf0rlI-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/nathalia-arantes-WYrvPSf0rlI-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/parsa-mahmoudi-wTsaSE-U7qY-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/parsa-mahmoudi-wTsaSE-U7qY-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/sam-ueJJlc4Mclk-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/sam-ueJJlc4Mclk-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/shio-yang-WlEgMwnNlWY-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/shio-yang-WlEgMwnNlWY-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/sincerely-media-tpgd1EpaaOE-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/sincerely-media-tpgd1EpaaOE-unsplash.jpg -------------------------------------------------------------------------------- /examples/testsuite/unsplash/small/thomas-millot-2JSLLwtM8MU-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/examples/testsuite/unsplash/small/thomas-millot-2JSLLwtM8MU-unsplash.jpg -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/jest.config.js -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/package.json -------------------------------------------------------------------------------- /release.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/release.sh -------------------------------------------------------------------------------- /scripts/benchmark.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/scripts/benchmark.ts -------------------------------------------------------------------------------- /scripts/prepare.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/scripts/prepare.sh -------------------------------------------------------------------------------- /src/__snapshots__/clusterHistogram.test.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/__snapshots__/clusterHistogram.test.ts.snap -------------------------------------------------------------------------------- /src/__snapshots__/getImageData.test.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/__snapshots__/getImageData.test.ts.snap -------------------------------------------------------------------------------- /src/__snapshots__/getPalette.test.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/__snapshots__/getPalette.test.ts.snap -------------------------------------------------------------------------------- /src/__snapshots__/kmeans.test.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/__snapshots__/kmeans.test.ts.snap -------------------------------------------------------------------------------- /src/clusterHistogram.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/clusterHistogram.test.ts -------------------------------------------------------------------------------- /src/clusterHistogram.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/clusterHistogram.ts -------------------------------------------------------------------------------- /src/color.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/color.ts -------------------------------------------------------------------------------- /src/fitGradient.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/fitGradient.test.ts -------------------------------------------------------------------------------- /src/fitGradient.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/fitGradient.ts -------------------------------------------------------------------------------- /src/format.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/format.test.ts -------------------------------------------------------------------------------- /src/format.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/format.ts -------------------------------------------------------------------------------- /src/getImageData.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/getImageData.test.ts -------------------------------------------------------------------------------- /src/getImageData.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/getImageData.ts -------------------------------------------------------------------------------- /src/getPalette.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/getPalette.test.ts -------------------------------------------------------------------------------- /src/getPalette.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/getPalette.ts -------------------------------------------------------------------------------- /src/greedyClusterMerge.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/greedyClusterMerge.test.ts -------------------------------------------------------------------------------- /src/greedyClusterMerge.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/greedyClusterMerge.ts -------------------------------------------------------------------------------- /src/kmeans.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/kmeans.test.ts -------------------------------------------------------------------------------- /src/kmeans.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/kmeans.ts -------------------------------------------------------------------------------- /src/lab.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/lab.test.ts -------------------------------------------------------------------------------- /src/lab.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/lab.ts -------------------------------------------------------------------------------- /src/lib-jsdom.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/lib-jsdom.test.ts -------------------------------------------------------------------------------- /src/lib.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/lib.test.ts -------------------------------------------------------------------------------- /src/lib.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/lib.ts -------------------------------------------------------------------------------- /src/linearRegression.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/linearRegression.test.ts -------------------------------------------------------------------------------- /src/linearRegression.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/linearRegression.ts -------------------------------------------------------------------------------- /src/test-helpers.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/test-helpers.ts -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/util.ts -------------------------------------------------------------------------------- /src/utils.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/src/utils.test.ts -------------------------------------------------------------------------------- /tests/endToEndTest.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tests/endToEndTest.sh -------------------------------------------------------------------------------- /tests/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tests/image.jpg -------------------------------------------------------------------------------- /tests/node-module-compatibility/commonjs.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tests/node-module-compatibility/commonjs.js -------------------------------------------------------------------------------- /tests/node-module-compatibility/esm.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tests/node-module-compatibility/esm.mjs -------------------------------------------------------------------------------- /tests/node-module-compatibility/package.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /tests/puppeteer.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tests/puppeteer.ts -------------------------------------------------------------------------------- /tests/snapshots/testsuite.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tests/snapshots/testsuite.json -------------------------------------------------------------------------------- /tsconfig-release.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tsconfig-release.json -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/tsconfig.json -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagner/dont-crop/HEAD/webpack.config.js --------------------------------------------------------------------------------