93 lines
3.3 KiB
Python
93 lines
3.3 KiB
Python
#!/usr/bin/python
|
|
##
|
|
## @author Edouard DUPIN
|
|
##
|
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
|
##
|
|
## @license APACHE v2.0 (see license file)
|
|
##
|
|
|
|
import lutinDebug as debug
|
|
import lutinTools as tools
|
|
import platform
|
|
import os
|
|
import lutinMultiprocess
|
|
import lutinDepend as dependency
|
|
enableResizeImage = True
|
|
try:
|
|
if platform.system() == "Darwin":
|
|
import CoreGraphics
|
|
else:
|
|
from PIL import Image
|
|
except:
|
|
enableResizeImage = False
|
|
debug.warning("Missing python tools : CoreGraphics (MacOs) or PIL")
|
|
|
|
def get_pow_2_multiple(size):
|
|
base = 2
|
|
while size>base:
|
|
base = base * 2
|
|
return base
|
|
|
|
# TODO : 3 things to do :
|
|
# check if force requested
|
|
# check if time change
|
|
# check if command line change
|
|
def resize(srcFile, destFile, x, y, cmd_file=None):
|
|
if enableResizeImage == False:
|
|
return
|
|
if os.path.exists(srcFile) == False:
|
|
debug.error("Request a resize an image that does not existed : '" + srcFile + "'")
|
|
cmd_line = "resize Image : " + srcFile + " ==> " + destFile + " newSize=(" + str(x) + "x" + str(y) + ")"
|
|
if False==dependency.need_re_build(destFile, srcFile, file_cmd=cmd_file , cmdLine=cmd_line):
|
|
return
|
|
# add cmdLine ...
|
|
x = get_pow_2_multiple(x)
|
|
extension = destFile[destFile.rfind('.'):]
|
|
if platform.system() == "Darwin":
|
|
source_image = CoreGraphics.CGImageImport(CoreGraphics.CGDataProviderCreateWithFilename(srcFile))
|
|
source_width = source_image.getWidth()
|
|
source_height = source_image.getHeight()
|
|
if source_width <= x:
|
|
# for small image just copy:
|
|
tools.copy_file(srcFile, destFile)
|
|
else:
|
|
if y <= 0:
|
|
# keep ratio :
|
|
y = int(float(x) * float(source_height) / float(source_width))
|
|
y = get_pow_2_multiple(y)
|
|
debug.print_element("resize Image (" + str(x) + "x" + str(y) + ")", srcFile, "==>", destFile)
|
|
debug.debug("Resize image: " + srcFile + " size=(" + str(source_width) + "x" + str(source_height) + ") -> (" + str(x) + "x" + str(y) + ")")
|
|
source_image_rect = CoreGraphics.CGRectMake(0, 0, source_width, source_height)
|
|
new_image = source_image.createWithImageInRect(source_image_rect)
|
|
colors_space = CoreGraphics.CGColorSpaceCreateDeviceRGB()
|
|
colors = CoreGraphics.CGFloatArray(5)
|
|
context = CoreGraphics.CGBitmapContextCreateWithColor(x, y, colors_space, colors)
|
|
context.setInterpolationQuality(CoreGraphics.kCGInterpolationHigh)
|
|
new_image_rect = CoreGraphics.CGRectMake(0, 0, x, y)
|
|
context.drawImage(new_image_rect, new_image)
|
|
tools.create_directory_of_file(destFile)
|
|
if extension == ".jpeg":
|
|
context.writeToFile(destFile, CoreGraphics.kCGImageFormatJPEG)
|
|
elif extension == ".png":
|
|
context.writeToFile(destFile, CoreGraphics.kCGImageFormatPNG)
|
|
else:
|
|
debug.error(" can not manage extention ... : " + destFile)
|
|
else:
|
|
# open an image file (.bmp,.jpg,.png,.gif) you have in the working folder
|
|
im1 = Image.open(srcFile)
|
|
if im1.size[0] <= x:
|
|
# for small image just copy:
|
|
tools.copy_file(srcFile, destFile)
|
|
else:
|
|
if y <= 0:
|
|
# keep ratio :
|
|
y = int(float(x) * float(im1.size[1]) / float(im1.size[0]))
|
|
y = get_pow_2_multiple(y)
|
|
debug.print_element("resize Image (" + str(x) + "x" + str(y) + ")", srcFile, "==>", destFile)
|
|
# use one of these filter options to resize the image
|
|
tmpImage = im1.resize((x, y), Image.ANTIALIAS)
|
|
tools.create_directory_of_file(destFile)
|
|
tmpImage.save(destFile)
|
|
lutinMultiprocess.store_command(cmd_line, cmd_file)
|