Resize Multiple Images in a Folder using PHP

Sometimes we need to resize multiple images in a folder, using PHP script we can achieve just that. Just point to folder where your images are located and execute following PHP script to resize your images. Modify source and destination folder location on top of script, you can also set width and height of Images. All resized images will be proportional. I have re-sized 300 images with this script, each 2-3 MB and took me about 8/10 minutes.
PHP
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
<?php //Maximize script execution time ini_set('max_execution_time', 0); //Initial settings, Just specify Source and Destination Image folder. $ImagesDirectory = '/home/public_html/websites/images/'; //Source Image Directory End with Slash $DestImagesDirectory = '/home/public_html/websites/images/new/'; //Destination Image Directory End with Slash $NewImageWidth = 500; //New Width of Image $NewImageHeight = 500; // New Height of Image $Quality = 80; //Image Quality //Open Source Image directory, loop through each Image and resize it. if($dir = opendir($ImagesDirectory)){ while(($file = readdir($dir))!== false){ $imagePath = $ImagesDirectory.$file; $destPath = $DestImagesDirectory.$file; $checkValidImage = @getimagesize($imagePath); if(file_exists($imagePath) && $checkValidImage) //Continue only if 2 given parameters are true { //Image looks valid, resize. if(resizeImage($imagePath,$destPath,$NewImageWidth,$NewImageHeight,$Quality)) { echo $file.' resize Success!<br />'; /* Now Image is resized, may be save information in database? */ }else{ echo $file.' resize Failed!<br />'; } } } closedir($dir); } //Function that resizes image. function resizeImage($SrcImage,$DestImage, $MaxWidth,$MaxHeight,$Quality) { list($iWidth,$iHeight,$type) = getimagesize($SrcImage); $ImageScale = min($MaxWidth/$iWidth, $MaxHeight/$iHeight); $NewWidth = ceil($ImageScale*$iWidth); $NewHeight = ceil($ImageScale*$iHeight); $NewCanves = imagecreatetruecolor($NewWidth, $NewHeight); switch(strtolower(image_type_to_mime_type($type))) { case 'image/jpeg': $NewImage = imagecreatefromjpeg($SrcImage); break; case 'image/png': $NewImage = imagecreatefrompng($SrcImage); break; case 'image/gif': $NewImage = imagecreatefromgif($SrcImage); break; default: return false; } // Resize Image if(imagecopyresampled($NewCanves, $NewImage,0, 0, 0, 0, $NewWidth, $NewHeight, $iWidth, $iHeight)) { // copy file if(imagejpeg($NewCanves,$DestImage,$Quality)) { imagedestroy($NewCanves); return true; } } } ?>
  • Any chance of making the script to work only on images wider than 800px? The way it's working now it resizes all of them, makes image with width of 150px to 800, and i need only the large images to be resized.
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    case 'image/jpeg': $NewImage = imagecreatefromjpeg($SrcImage); break; case 'image/png': $NewImage = imagecreatefrompng($SrcImage); break; case 'image/gif': $NewImage = imagecreatefromgif($SrcImage); break; default: return false;
    this worked for me for all the files. need to add break condition in every case
  • Hey Thank you so much you saved my time bro :) I have a problem with this code . This code successfully converted JPEG files but all PNG file failed to convert . Can you tell me about this trouble ? Please let me know your answer with email . Thanks alot