- There are many basic attributes of an Image frequently used in the internal decision making of the image-processing routines.
- Pillow - the Python Image Processing Library provides Image class, which represents a generic image. Any of the several image types supported by Pillow, can be loaded with the Image class.
- Image Format: The format attribute of the Image class describes what format the loaded images are. It could be JPEG, PNG, GIF or any other supported format.
- Image Mode: The mode describes what kind of pixel format is used in an image.
e.g., If the mode is "L" the pixels are in grey scale.
If the mode is "RGB" the image uses RGB color model.
If the mode is "RGBA" the image uses RGBA color model where the letter “A” represents the alpha channel.
- Image Size: Any 2-D image is a matrix of pixels. To process an image, it is often required to navigate through the 2D-pixel buffer and perform the required image processing operations pixel by pixel. The boundary condition for any such loop is based on the size of the image - which defines the width and height of the image.
- The image class has the size attribute, which is a tuple of width and height.
- Palette: Many a times it is required to represent an image with fewer colors than the supported one byte per one basic color scheme. The basic colors are Red, Green and Blue. Having fewer colors reduces the memory footprint, reduces network and IO overhead and improves application performance in several cases like Gaming and others.
- If an image with RGB color model can represent 256 types of red, 256 types of green, 256 types of blue using one byte per color model that is 3 bytes per pixel - an Image with a palette of 8 colors uses only 3 bits of a byte or the whole byte (leaving 5 bits unused) still saving 2 bytes of storage per pixel.
- If an image has a mode "P" it means it has an associated color palette and can be retrieved using the palette attribute of the Image object.
- Additional Image Information: Any other information belonging to a specific type of Image can be added using the info attribute, which is a python dictionary, which can store information as key, value pairs.
Example:
from PIL import Image
# Define a method for printing image attributes def printImageAttributes(imageObject, imagePath): # Retrieve the attributes of the image fileFormat = imageObject.format # Format of the image imageMode = imageObject.mode # Mode of the image imageSize = imageObject.size # Size of the image - tupe of (width, height) colorPalette = imageObject.palette # Palette used in the image
# Print the attributes of the image print("Attributes of image:%s"%imagePath)
print("The file format of the image is:%s"%fileFormat) print("The mode of the image is:%s"%imageMode) print("The size of the image is:width %d pixels,height %d pixels"%imageSize) print("Color palette used in image:%s"%colorPalette)
print("Keys from image.info dictionary:%s") for key, value in imageObject.info.items() : print(key)
# Create an image object and show the image imagePath = "./colors.jpg" imagePathTemp = "TempImage"
image = Image.open(imagePath)
image.show()
# Create an image object with color palette and show the image imageWithColorPalette = image.convert("P", palette=Image.ADAPTIVE, colors=8) imageWithColorPalette.show()
# Print the attributes of the images printImageAttributes(image, imagePath) print("==================") printImageAttributes(imageWithColorPalette, imagePathTemp)
|
Output:
Image 1:
Image 2:
Attributes of image:./colors.jpg The file format of the image is:JPEG The mode of the image is:RGB The size of the image is:width 640 pixels,height 427 pixels Color palette used in image:None Keys from image.info dictionary:%s jfif jfif_version dpi jfif_unit jfif_density icc_profile ================== Attributes of image:TempImage The file format of the image is:None The mode of the image is:P The size of the image is:width 640 pixels,height 427 pixels Color palette used in image:<PIL.ImagePalette.ImagePalette object at 0x101600f28> Keys from image.info dictionary:%s jfif jfif_version dpi jfif_unit jfif_density icc_profile |