mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-29 23:29:41 +02: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' )
|