mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-11-04 16:14:00 +01:00 
			
		
		
		
	- Added docimages_regression_tests.py -- It's a test for Bug1844, concerning envelope points. - Added decorate_images.py -- It's a script to crop and drop shadow.
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# decorate_images.py
 | 
						|
# Crops and drop-shadows images for the manual
 | 
						|
 | 
						|
from PIL import Image
 | 
						|
from PIL import ImageFilter
 | 
						|
import glob
 | 
						|
import os
 | 
						|
 | 
						|
# Edit these to your image source and image destination paths.
 | 
						|
src = "C:/OpenSourceGit/AudacityTeamTools/wit-html/trim_me"
 | 
						|
dest = "C:/OpenSourceGit/AudacityTeamTools/wit-html/processed"
 | 
						|
 | 
						|
# from https://en.wikibooks.org/wiki/Python_Imaging_Library/Drop_Shadows
 | 
						|
def makeShadow(image, iterations, border, offset, backgroundColour, shadowColour):
 | 
						|
    # image: base image to give a drop shadow
 | 
						|
    # iterations: number of times to apply the blur filter to the shadow
 | 
						|
    # border: border to give the image to leave space for the shadow
 | 
						|
    # offset: offset of the shadow as [x,y]
 | 
						|
    # backgroundCOlour: colour of the background
 | 
						|
    # shadowColour: colour of the drop shadow
 | 
						|
    
 | 
						|
    #Calculate the size of the shadow's image
 | 
						|
    fullWidth  = image.size[0] + abs(offset[0]) + 2*border
 | 
						|
    fullHeight = image.size[1] + abs(offset[1]) + 2*border
 | 
						|
    
 | 
						|
    #Create the shadow's image. Match the parent image's mode.
 | 
						|
    shadow = Image.new(image.mode, (fullWidth, fullHeight), backgroundColour)
 | 
						|
    
 | 
						|
    # Place the shadow, with the required offset
 | 
						|
    shadowLeft = border + max(offset[0], 0) #if <0, push the rest of the image right
 | 
						|
    shadowTop  = border + max(offset[1], 0) #if <0, push the rest of the image down
 | 
						|
    #Paste in the constant colour
 | 
						|
    shadow.paste(shadowColour, 
 | 
						|
                [shadowLeft, shadowTop,
 | 
						|
                 shadowLeft + image.size[0],
 | 
						|
                 shadowTop  + image.size[1] ])
 | 
						|
    
 | 
						|
    # Apply the BLUR filter repeatedly
 | 
						|
    for i in range(iterations):
 | 
						|
        shadow = shadow.filter(ImageFilter.BLUR)
 | 
						|
 | 
						|
    # Paste the original image on top of the shadow 
 | 
						|
    imgLeft = border - min(offset[0], 0) #if the shadow offset was <0, push right
 | 
						|
    imgTop  = border - min(offset[1], 0) #if the shadow offset was <0, push down
 | 
						|
    shadow.paste(image, (imgLeft, imgTop))
 | 
						|
 | 
						|
    return shadow    
 | 
						|
 | 
						|
# crops on 3 sides.    
 | 
						|
def crop3_one( image, d ) :            
 | 
						|
    w,h = image.size
 | 
						|
    image = image.crop( (d, 0, w-d, h-d) )
 | 
						|
    return image
 | 
						|
 | 
						|
#crops on 4 sides
 | 
						|
def crop4_one( image, d ) :            
 | 
						|
    w,h = image.size
 | 
						|
    image = image.crop( (d, d, w-d, h-d) )
 | 
						|
    return image
 | 
						|
 | 
						|
# Take this one full path name, process it, output to dest directory.
 | 
						|
def process_one( name ):
 | 
						|
    global dest
 | 
						|
    name = os.path.realpath( name )
 | 
						|
    image = Image.open( name )
 | 
						|
 | 
						|
    #---- Start of image processing steps
 | 
						|
    image = crop4_one( image, 4 )
 | 
						|
    image = makeShadow( image, 3, 2, [2,2], (255,255,255), (80,80,80) )
 | 
						|
    #---- End of image processing steps
 | 
						|
    
 | 
						|
    path, fname = os.path.split( name )
 | 
						|
    print( "Name:", fname, " Size:", image.size )
 | 
						|
    image.save( "/".join( (dest, fname )) )
 | 
						|
 | 
						|
 | 
						|
# Process all .png images in directory
 | 
						|
for filename in glob.iglob(src + '/*.png'):
 | 
						|
    name = os.path.realpath( filename );
 | 
						|
    process_one(name)
 | 
						|
 | 
						|
 | 
						|
#process_one( 'C:/OpenSourceGit/AudacityTeamTools/wit-html/trim_3/AfterChirp.png' )
 |