1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-29 23:29:41 +02:00
audacity/scripts/piped-work/decorate_images.py
James Crook ca2dc254b1 Added a regression test and an image mangling python script
- 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.
2018-02-27 22:26:30 +00:00

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' )