ImageMagick in Python

ImageMagick in Python#

Before you start, make sure to download ImageMagick: https://imagemagick.org/index.php.

The following code is just to demonstrate how you can use ImageMagick by executing shell commands through Python. This is especially useful if you’d like to e.g. loop through a lot of commands or images.

Test out running an image magick command#

First, collect all of the original image files in a repository.

import os

cur_dir = os.getcwd()
path_to_images = os.path.join(cur_dir,"images","image_magick","original_images")
print(path_to_images)

#get all of the files
image_files = os.listdir(path_to_images)
print(image_files)
/Users/martincz/GitHub/COGS219/cogs219.github.io/notebooks/images/image_magick/original_images
['31_150.jpg', '21_150.jpg', '13_100_R.jpg', '8_0.jpg', '18_100.jpg', '43_150.jpg', '16_0.jpg', '7_50_R.jpg', '6_50_R.jpg', '4_150_R.jpg', '21_50_R.jpg', '20_50_R.jpg', '45_100.jpg', '42_0_R.jpg', '26_100_R.jpg', '32_0.jpg', '40_150_R.jpg', '48_100_R.jpg', '6_50.jpg', '32_100_R.jpg', '30_0_R.jpg', '20_0_R.jpg', '27_100.jpg', '37_100.jpg', '13_50.jpg', '11_100.jpg', '16_0_R.jpg', '48_0.jpg', '16_150_R.jpg', '28_150.jpg', '38_150.jpg', '15_50_R.jpg', '5_0_R.jpg', '14_50_R.jpg', '30_0.jpg', '2_100.jpg', '37_50.jpg', '23_150_R.jpg', '4_150.jpg', '1_100_R.jpg', '9_150_R.jpg', '29_0_R.jpg', '29_50.jpg', '39_0_R.jpg', '14_0.jpg', '29_0.jpg', '25_50.jpg', '45_100_R.jpg', '17_150.jpg', '46_50.jpg', '37_150_R.jpg', '10_0.jpg', '41_50_R.jpg', '2_150_R.jpg', '10_100.jpg', '40_50_R.jpg', '20_100_R.jpg', '17_0_R.jpg', '28_150_R.jpg', '4_0_R.jpg', '34_100_R.jpg', '3_100.jpg', '46_150_R.jpg', '11_50.jpg', '39_150.jpg', '29_150.jpg', '38_0_R.jpg', '39_50.jpg', '28_0_R.jpg', '15_100_R.jpg', '44_50.jpg', '27_50.jpg', '5_150.jpg', '16_150.jpg', '34_0.jpg', '35_50.jpg', '36_50_R.jpg', '37_50_R.jpg', '48_50.jpg', '36_0.jpg', '25_150_R.jpg', '20_150.jpg', '30_150.jpg', '7_100_R.jpg', '42_150.jpg', '39_100_R.jpg', '31_150_R.jpg', '19_100.jpg', '43_100_R.jpg', '18_100_R.jpg', '10_150_R.jpg', '44_100.jpg', '43_0_R.jpg', '4_50.jpg', '21_0_R.jpg', '31_0_R.jpg', '8_50.jpg', '36_100.jpg', '26_100.jpg', '12_0.jpg', '46_50_R.jpg', '31_0.jpg', '47_50_R.jpg', '1_100.jpg', '6_0_R.jpg', '31_50.jpg', '40_50.jpg', '15_0_R.jpg', '12_100_R.jpg', '23_50.jpg', '12_100.jpg', '41_150_R.jpg', '14_150.jpg', '28_0.jpg', '33_100_R.jpg', '48_0_R.jpg', '15_50.jpg', '5_150_R.jpg', '31_50_R.jpg', '30_50_R.jpg', '19_50.jpg', '15_0.jpg', '27_100_R.jpg', '7_150.jpg', '17_0.jpg', '40_150.jpg', '9_0.jpg', '8_100.jpg', '32_150.jpg', '22_150.jpg', '17_150_R.jpg', '24_100.jpg', '34_100.jpg', '33_0_R.jpg', '23_0_R.jpg', '44_100_R.jpg', '36_150_R.jpg', '22_150_R.jpg', '33_0.jpg', '8_150_R.jpg', '41_0_R.jpg', '46_100.jpg', '35_100_R.jpg', '2_50.jpg', '47_150_R.jpg', '41_150.jpg', '18_50_R.jpg', '19_50_R.jpg', '23_150.jpg', '33_150.jpg', '1_50_R.jpg', '3_150_R.jpg', '37_0.jpg', '9_100.jpg', '29_150_R.jpg', '21_100_R.jpg', '26_50_R.jpg', '27_50_R.jpg', '35_100.jpg', '25_100.jpg', '22_0_R.jpg', '13_0.jpg', '32_0_R.jpg', '40_0_R.jpg', '14_100_R.jpg', '47_100.jpg', '30_150_R.jpg', '38_100_R.jpg', '21_50.jpg', '42_50.jpg', '42_100_R.jpg', '7_0_R.jpg', '12_50_R.jpg', '13_50_R.jpg', '14_0_R.jpg', '13_100.jpg', '33_50.jpg', '11_0.jpg', '24_150_R.jpg', '6_100_R.jpg', '48_150.jpg', '15_150.jpg', '35_0.jpg', '6_150.jpg', '11_150_R.jpg', '17_50.jpg', '19_100_R.jpg', '41_0.jpg', '24_100_R.jpg', '6_150_R.jpg', '28_50.jpg', '10_150.jpg', '36_50.jpg', '47_50.jpg', '48_50_R.jpg', '42_150_R.jpg', '3_150.jpg', '39_0.jpg', '30_100_R.jpg', '39_100.jpg', '38_150_R.jpg', '24_50.jpg', '29_100.jpg', '3_0.jpg', '2_0_R.jpg', '12_50.jpg', '11_100_R.jpg', '5_100.jpg', '19_150_R.jpg', '16_100.jpg', '11_0_R.jpg', '20_0.jpg', '22_0.jpg', '3_100_R.jpg', '29_100_R.jpg', '21_150_R.jpg', '37_0_R.jpg', '27_0_R.jpg', '20_100.jpg', '42_50_R.jpg', '30_100.jpg', '43_50_R.jpg', '42_100.jpg', '47_100_R.jpg', '45_0_R.jpg', '1_0.jpg', '19_150.jpg', '7_50.jpg', '35_150_R.jpg', '18_0_R.jpg', '14_150_R.jpg', '44_150.jpg', '36_150.jpg', '26_150.jpg', '43_0.jpg', '35_50_R.jpg', '34_50_R.jpg', '26_0_R.jpg', '36_0_R.jpg', '5_50.jpg', '31_100.jpg', '21_100.jpg', '17_100_R.jpg', '18_150.jpg', '9_50.jpg', '47_0.jpg', '43_100.jpg', '16_50_R.jpg', '44_0_R.jpg', '17_50_R.jpg', '45_150.jpg', '22_100_R.jpg', '19_0_R.jpg', '8_100_R.jpg', '26_0.jpg', '36_100_R.jpg', '28_50_R.jpg', '29_50_R.jpg', '5_0.jpg', '27_150.jpg', '44_150_R.jpg', '37_150.jpg', '12_150_R.jpg', '11_150.jpg', '26_50.jpg', '19_0.jpg', '45_50.jpg', '7_0.jpg', '38_50.jpg', '28_100.jpg', '34_50.jpg', '38_100.jpg', '4_50_R.jpg', '5_50_R.jpg', '24_0.jpg', '2_150.jpg', '3_0_R.jpg', '22_50_R.jpg', '23_50_R.jpg', '4_100.jpg', '5_100_R.jpg', '45_0.jpg', '27_150_R.jpg', '33_150_R.jpg', '10_50.jpg', '17_100.jpg', '41_100_R.jpg', '10_0_R.jpg', '43_150_R.jpg', '46_0_R.jpg', '39_150_R.jpg', '9_50_R.jpg', '41_100.jpg', '8_50_R.jpg', '31_100_R.jpg', '25_100_R.jpg', '23_100.jpg', '33_100.jpg', '34_0_R.jpg', '11_50_R.jpg', '7_150_R.jpg', '10_50_R.jpg', '24_0_R.jpg', '23_0.jpg', '9_150.jpg', '8_0_R.jpg', '35_150.jpg', '25_150.jpg', '42_0.jpg', '47_150.jpg', '1_50.jpg', '18_150_R.jpg', '10_100_R.jpg', '14_50.jpg', '46_100_R.jpg', '38_0.jpg', '34_150_R.jpg', '3_50_R.jpg', '2_50_R.jpg', '2_100_R.jpg', '20_150_R.jpg', '13_150.jpg', '28_100_R.jpg', '40_0.jpg', '18_50.jpg', '48_100.jpg', '30_50.jpg', '12_0_R.jpg', '25_50_R.jpg', '24_50_R.jpg', '21_0.jpg', '15_100.jpg', '22_50.jpg', '6_100.jpg', '1_0_R.jpg', '2_0.jpg', '15_150_R.jpg', '41_50.jpg', '1_150.jpg', '25_0.jpg', '6_0.jpg', '16_100_R.jpg', '16_50.jpg', '18_0.jpg', '12_150.jpg', '13_0_R.jpg', '43_50.jpg', '14_100.jpg', '37_100_R.jpg', '38_50_R.jpg', '20_50.jpg', '39_50_R.jpg', '45_150_R.jpg', '44_0.jpg', '7_100.jpg', '32_50.jpg', '23_100_R.jpg', '1_150_R.jpg', '9_100_R.jpg', '47_0_R.jpg', '46_0.jpg', '45_50_R.jpg', '40_100.jpg', '44_50_R.jpg', '13_150_R.jpg', '8_150.jpg', '32_100.jpg', '22_100.jpg', '25_0_R.jpg', '35_0_R.jpg', '32_150_R.jpg', '24_150.jpg', '4_0.jpg', '34_150.jpg', '40_100_R.jpg', '48_150_R.jpg', '3_50.jpg', '9_0_R.jpg', '27_0.jpg', '32_50_R.jpg', '33_50_R.jpg', '4_100_R.jpg', '46_150.jpg', '26_150_R.jpg']

Now, execute the desired image magick command on all of the images you collected (e.g. using a for loop).

Resize images:

#define a target path
path_to_resized_images = os.path.join(cur_dir,"images","image_magick","resized_images")

for image_name in image_files:
    #full path to original image
    old_image_path = os.path.join(path_to_images, image_name)
    print(old_image_path)
    new_image_path = os.path.join(path_to_resized_images,os.path.splitext(image_name)[0]) + '_resized.jpg'
    print(new_image_path)
    magick_command = 'magick '+old_image_path + ' -resize 25% '+ new_image_path
    os.system(magick_command)

Crop Images: Split the images down the middle (50% width, 100% height)

#define a target path
path_to_cropped_images = os.path.join(cur_dir,"images","image_magick","split_images")

for image_name in image_files:
    #full path to original image
    old_image_path = os.path.join(path_to_images, image_name)
    print(old_image_path)
    new_image_path = os.path.join(path_to_cropped_images,os.path.splitext(image_name)[0]) + '_split.jpg'
    print(new_image_path)
    magick_command = "magick "+old_image_path + " -crop '50%x100%' "+ new_image_path
    os.system(magick_command)