Files
convert-images-for-web/convert.py

106 lines
3.6 KiB
Python

import os
import sys
import zipfile
import urllib.request
import tarfile
inputFolder = 'full-res-files'
outputFolder = 'web-files'
highResOutput = 'high-res'
magickHome = ""
dyldLibrary = ""
def clearScreen():
os.system('cls' if os.name == 'nt' else 'clear')
def convertFilesInInput():
#rename files with spaces
print("Renaming any files in the input folder that have a space and replacing that with a dash.")
for filename in os.listdir(inputFolder):
#os.path.join needed to include path when renaming
os.rename(os.path.join(inputFolder,filename), os.path.join(inputFolder,filename.replace(' ', '-')))
for filename in os.listdir(inputFolder):
print("Converting " + filename + " for web.")
convertImage("1500","50",filename,getOutputPath())
print("Converting " + filename + " for delivery.")
# 6000x can give you a 20 inch image for print. Printing is 300dpi so 6000px/300dpi = 20inch, but if someone wants a 20x16 your smaller edge needs to be 4800px
convertImage("8000","50",filename,getOutputPathHighRes())
def convertImage(pixels,quality,filename,outputPath):
#os.path.splitext(filename)[0] gets rid of file extension if you want a different extension
getProfileCmd = getImagemagickExe() + " " + getInputPath() + filename + " profile.icc"
# pixels and profile need double quotes around them
convertCmd = getImagemagickExe() + " " + getInputPath() + filename + " -resize \"" + pixels + "x\" -quality " + quality + " -depth 24 -strip -profile \"profile.icc\" " + outputPath + filename
if(os.name == "nt"):
os.system(getProfileCmd)
os.system(convertCmd)
else:
os.system(magickHome + dyldLibrary + getProfileCmd)
os.system(magickHome + dyldLibrary + convertCmd)
os.remove("profile.icc")
def downloadImagemagick():
if not os.path.isfile(getImagemagickExe()):
print("ImageMagick does not exist. Downloading now...")
if(os.name == "nt"):
urllib.request.urlretrieve ("https://imagemagick.org/download/binaries/ImageMagick-7.0.8-15-portable-Q16-x64.zip", "imagemagick.zip")
zipfile.ZipFile("imagemagick.zip","r").extractall(getImagemagickPath())
os.remove("imagemagick.zip")
elif(sys.platform == "darwin"):
urllib.request.urlretrieve ("https://imagemagick.org/download/binaries/ImageMagick-x86_64-apple-darwin17.7.0.tar.gz", "imagemagick.tar.gz")
tarfile.open("imagemagick.tar.gz","r:gz").extractall("imagemagick/")
os.remove("imagemagick.tar.gz")
os.rename("imagemagick/ImageMagick-7.0.8", getImagemagickPath())
else:
print("ImageMagick already downloaded.")
def getImagemagickPath():
if(os.name == "nt"):
return "imagemagick\\windows\\"
elif(sys.platform == "darwin"):
return "imagemagick/osx/"
else:
returnErrorAndExit("Your os is not supported. Try using Windows or OSX")
def getImagemagickExe():
if(os.name == "nt"):
return getImagemagickPath() + "convert.exe"
elif(sys.platform == "darwin"):
currentDir = os.path.dirname(os.path.realpath(__file__))
global magickHome
magickHome = "export MAGICK_HOME=" + currentDir + "/" + getImagemagickPath() + ";"
global dyldLibrary
dyldLibrary = "export DYLD_LIBRARY_PATH=$MAGICK_HOME/lib;"
return getImagemagickPath() + "bin/convert"
else:
returnErrorAndExit("Your os is not supported. Try using Windows or OSX")
def getOutputPath():
if(os.name == "nt"):
return outputFolder + "\\"
else:
return outputFolder + "/"
def getOutputPathHighRes():
if(os.name == "nt"):
return highResOutput + "\\"
else:
return highResOutput + "/"
def getInputPath():
if(os.name == "nt"):
return inputFolder + "\\"
else:
return inputFolder + "/"
def returnErrorAndExit(message):
input(message)
sys.exit()
downloadImagemagick()
convertFilesInInput()