1. A method of detecting duplicate and near duplicate images, comprising: receiving an image; generating a first cell array for the image comprising a first grid of cells corresponding to regions of the image, the first grid of cells comprising average pixel intensity values for corresponding regions of the image; rotating the image based on the average pixel intensity values of the first grid of cells; generating a second cell array for the rotated image comprising a second grid of cells corresponding to regions of the rotated image, the second grid of cells comprising numeric values for corresponding regions of the rotated image; generating an image fingerprint for the rotated image, the image fingerprint comprising a sequence of the numeric values for the rotated image; identifying one or more duplicate or near duplicate images from a set of previously stored images by comparing the image fingerprint with a set of previously generated image fingerprints corresponding to the set of previously stored images, wherein comparing the image fingerprint with the set of previously generated image fingerprints comprises comparing the sequence of numeric values with sequences of numeric values of the previously generated image fingerprints; and in response to identifying one or more duplicate or near duplicate images from the set of previously stored images, taking a defined action with respect to the one or more duplicate or near duplicate images.