# I've recently started using iWeb (which for the non # Mac OS X inclined is the application used to make web # sites and what not). # # After creating a 80 page site I was horrified at the # total size site. Nearly 100 MB!! The site really wasn't # very graphics intensive. Each page had only one image on it # at most! I started examining the file structure and was # horrified to realize that iWeb produces web sites use # huge image files. Not even remotely compressed. # # I needed to rescale the jpg and png files down to # reasonable sizes. from PIL import Image import glob import os # this is the default size for images: size = 256, 256 # I provide 2 different sizes for other files # that need to be larger. # Identify the names of the files that need to # be higher quality. csize0files = 'PhotoGray_nav_bg.png', 'bg_round.jpg' csize0 = 768, 768 # different custom sizes for other 'important files # csize1files = 'nonefiles', 'none' csize1 = 512, 512 # create a list for all the files and then add # them all in type by type. # For my page I just had jpg and png images all_matching_files = [] for i in glob.glob("*/*.jpg"): all_matching_files.append(i) for i in glob.glob("*/*.png"): all_matching_files.append(i) # if you are using this for iWeb checkout the file count! # my 80 page site had 3000+ images!!! print "total images to be resized: " + str(len(all_matching_files)) count = len(all_matching_files) # loop through all the images and make changes for infile in all_matching_files: scalesize = size im = Image.open(infile) # split out all the useful parts of the file's path thePath, theFile = os.path.split(infile) fileName, extension = os.path.splitext(theFile) # custom resize if necessary if theFile in csize1files: scalesize = csize1 elif theFile in csize0files: scalesize = csize0 # resize with PIL's awesome thumbnail method im.thumbnail(scalesize, Image.ANTIALIAS) # save back as appropriate type if extension == ".png": im.save(infile, "PNG") else: im.save(infile, "JPEG") count -= 1 if count % 10 == 0: # output some useful stats print str(count) + " images remaining." print "....done" ## output: ## total images to be resized: 3907 ## 3900 images remaining. ## 3890 images remaining. ## ... [snip].....(there were a lot!) ## 30 images remaining. ## 20 images remaining. ## 10 images remaining. ## 0 images remaining. ## ....done # Running this script reduced my website size # from 96MB to 39MB!! # # Certainly there is still room for improvement # future posts will ideally be aimed at further # efficiency gains.
A python example based blog that shows how to accomplish python goals and how to correct python errors.
Tuesday, October 20, 2009
Python - reduce a web sites size
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment