def create_derived_image(image,pilDerivedImage,type,eraseOldVersions = True): if eraseOldVersions: image.derived_images.filter(type = type).delete() (directory,basename,extension) = image.splitPath() derivedImageFilename = basename+"_"+type+"."+extension derivedImagePath = directory+"/"+derivedImageFilename cnt = 1 while os.path.exists(derivedImagePath): derivedImageFilename = basename+"_"+type+("_%d" % cnt)+"."+extension derivedImagePath = directory+"/"+derivedImageFilename cnt+=1 derivedImageUrl = settings.FILE_UPLOAD_URL+"/"+derivedImageFilename pilDerivedImage.save(derivedImagePath) derivedImage = Image() derivedImage.path = derivedImagePath derivedImage.user = image.user derivedImage.base_image = image derivedImage.type = type derivedImage.url = derivedImageUrl derivedImage.width = pilDerivedImage.size[0] derivedImage.height = pilDerivedImage.size[1] derivedImage.save() return derivedImage
def upload_image(imageData,user = None,save = True,path = None): try: extension = re.search(r"\.(\w+)$",imageData.name).group(1) except: raise Exception("Cannot determine extension from filename: %s" % imageData.name) try: temporaryPath = generate_random_filename(settings.FILE_TEMPORARY_UPLOAD_PATH,extension) if path: (directory,filename) = os.path.split(path) match = re.search(r"^(.*)\.(\w+)$",filename) imageFilenameKey = match.group(1) else: imageFilenameKey = generate_random_filename_key(settings.FILE_UPLOAD_PATH,extension = "jpg") imagePath = settings.FILE_UPLOAD_PATH+"/"+imageFilenameKey+"."+settings.IMAGE_EXTENSION imageUrl = settings.FILE_UPLOAD_URL+"/"+imageFilenameKey+"."+settings.IMAGE_EXTENSION temporaryFile = open(temporaryPath,'wb') for chunk in imageData.chunks(): temporaryFile.write(chunk) temporaryFile.close() try: pilImage = PIL.Image.open(temporaryPath) aspectRatio = float(pilImage.size[0])/float(pilImage.size[1]) if aspectRatio > 1.: aspectRatio = 1./aspectRatio if aspectRatio < settings.IMAGE_MINIMUM_ASPECT_RATIO: raise AspectRatioException("Aspect ratio of the image is too small!") pilRescaledImage = shrink_image(pilImage,settings.IMAGE_MAXIMUM_DIMENSIONS) pilRescaledImage.save(imagePath,settings.IMAGE_FORMAT) image = Image() image.user = user image.path = imagePath image.url = imageUrl image.width = pilRescaledImage.size[0] image.height = pilRescaledImage.size[1] if save: image.save() return image except: raise finally: if os.path.exists(temporaryPath): os.remove(temporaryPath)