thumbnailfield Package

compatibility Module

Compatibility module

conf Module

class thumbnailfield.conf.ThumbnailFieldConf(**kwargs)[source]

Bases: appconf.base.AppConf

DEFAULT_PIL_SAVE_OPTIONS = {}
DEFAULT_PROCESS_METHOD = 'thumbnail'
DEFAULT_PROCESS_OPTIONS = {'resample': 1}
FILENAME_PATTERN = '%(root)s/%(filename)s.%(name)s.%(ext)s'
class Meta

Bases: object

ThumbnailFieldConf.PROCESS_METHOD_TABLE = {'sepia': <function get_sepia_image at 0x7f60a7a507d0>, 'crop': <function get_cropped_image at 0x7f60a7a508c0>, 'grayscale': <function get_grayscale_image at 0x7f60a7a506e0>, 'thumbnail': <function get_thumbnail_image at 0x7f60a7a50a28>, 'resize': <function get_resized_image at 0x7f60a7a509b0>}
ThumbnailFieldConf.REMOVE_PREVIOUS = False

fields Module

Model fields of ThumbnailField

class thumbnailfield.fields.ThumbnailField(verbose_name=None, name=None, width_field=None, height_field=None, patterns=None, pil_save_options=None, **kwargs)[source]

Bases: django.db.models.fields.files.ImageField

Enhanced ImageField

ThumbnailField has the follwoing features

  • Automatically remove previous file
  • Automatically generate thumbnail files
  • Automatically remove generated previous thumbnail files
attr_class

alias of ThumbnailFieldFile

description = <django.utils.functional.__proxy__ object>
descriptor_class

alias of ThumbnailFileDescriptor

class thumbnailfield.fields.ThumbnailFieldFile(*args, **kwargs)[source]

Bases: django.db.models.fields.files.ImageFieldFile

Enhanced ImageFieldFile

This FieldFile contains thumbnail ImageFieldFile instances and these thumbnails are automatically generate when accessed

_get_thumbnail_filename -- get thumbnail filename
_get_image -- get PIL image instance
_get_thumbnail -- get PIL image instance of thumbnail
_get_thumbnail_file -- get ImageFieldFile instance of thumbnail
_create_thumbnail -- create PIL image instance of thumbnail
_create_thumbnail_file -- create ImageFieldFile instance of thumbnail
_update_thumbnail_file -- update thumbnail file and return

ImageFieldFile instance

_remove_thumbnail_file -- remove thumbanil file from storage
iter_pattern_name -- return iterator of pattern name
get_pattern_name -- return list of pattern name
iter_thumbnail_filenames -- return iterator of thumbnail filename
get_thumbnail_filenames -- return list of thumbnail filename
iter_thumbnail_files -- return iterator of thumbnail file
get_thumbnail_files -- return list of thumbnail file
update_thumbnail_files -- update thumbnail files in storage
remove_thumbnail_files -- remove thumbnail files from storage
delete(save=True)[source]
get_pattern_names()[source]

return list of thumbnail pattern names

get_thumbnail_filenames()[source]

return list of thumbnail filenames

get_thumbnail_files()[source]

return list of thumbnail files

iter_pattern_names()[source]

return iterator of thumbnail pattern names

iter_thumbnail_filenames()[source]

return iterator of thumbnail filenames

iter_thumbnail_files()[source]

return iterator of thumbnail files

remove_thumbnail_files(save=True)[source]

remove thumbnail files from storage

Attribute:
save – If true, the model instance of this field will be saved.
save(name, content, save=True)[source]
update_thumbnail_files()[source]

update thumbanil files of storage

class thumbnailfield.fields.ThumbnailFileDescriptor(field)[source]

Bases: django.db.models.fields.files.ImageFileDescriptor

Enhanced ImageFileDescriptor

Just like the ImageFileDescriptor, but for ThumbnailField. The only difference is removing previous Image and Thumbnails from storage when the value has changed.

models Module

process_methods Module

Builtin ThumbnailField process methods

thumbnailfield.process_methods.get_cropped_image(img, width, height, left, upper, **options)[source]

get cropped image

Attribute:
img – PIL image instance width – width of thumbnail height – height of thumbnail left – left point of thumbnail upper – upper point of thumbnail kwargs – Options used in PIL thumbnail method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> img = Image.new('RGBA', (1000, 800))
>>> thumb = get_cropped_image(img, 100, 100, 0, 0)
>>> assert thumb.size[0] == 100
>>> assert thumb.size[1] == 100
thumbnailfield.process_methods.get_grayscale_image(img, width, height, **options)[source]

get grayscale image

Attribute:
img – PIL image instance width – width of thumbnail height – height of thumbnail kwargs – Options used in PIL thumbnail method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> img = Image.new('RGBA', (1000, 800))
>>> thumb = get_grayscale_image(img, 100, 100)
thumbnailfield.process_methods.get_resized_image(img, width, height, force=False, **options)[source]

get resized image

Attribute:
img – PIL image instance width – width of thumbnail height – height of thumbnail kwargs – Options used in PIL thumbnail method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> img = Image.new('RGBA', (1000, 800))
>>> thumb = get_resized_image(img, 100, 100)
>>> assert thumb.size[0] == 100
>>> assert thumb.size[1] == 100
thumbnailfield.process_methods.get_sepia_image(img, width, height, **options)[source]

get sepia image

Attribute:
img – PIL image instance width – width of thumbnail height – height of thumbnail kwargs – Options used in PIL thumbnail method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> img = Image.new('RGBA', (1000, 800))
>>> thumb = get_sepia_image(img, 100, 100)
thumbnailfield.process_methods.get_thumbnail_image(img, width, height, **options)[source]

get thumbnail image

Attribute:
img – PIL image instance width – width of thumbnail height – height of thumbnail kwargs – Options used in PIL thumbnail method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> img = Image.new('RGBA', (1000, 800))
>>> thumb = get_thumbnail_image(img, 100, 100)
>>> assert thumb.size[0] == 100
>>> assert thumb.size[1] == 80

utils Module

Utilities of ThumbnailField

thumbnailfield.utils.get_content_file(img, file_fmt, **kwargs)[source]

get ContentFile from PIL image instance with file_fmt

img -- PIL Image instance
file_fmt -- Saved image format

PNG, JPEG, ...

kwargs -- Options used in PIL image save method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> from django.core.files.base import ContentFile
>>> img = Image.new('RGBA', (100, 100))
>>> cf = get_content_file(img, 'PNG')
>>> assert isinstance(cf, ContentFile)
thumbnailfield.utils.get_fileformat_from_filename(filename)[source]

get fileformat from filename

filename -- filename used to guess fileformat
Usage::
>>> assert get_fileformat_from_filename("test.png") == "PNG"
>>> assert get_fileformat_from_filename("test.jpg") == "JPEG"
>>> assert get_fileformat_from_filename("test.jpe") == "JPEG"
>>> assert get_fileformat_from_filename("test.jpeg") == "JPEG"
>>> assert get_fileformat_from_filename("test.gif") == "GIF"
>>> assert get_fileformat_from_filename("test.tif") == "TIFF"
>>> assert get_fileformat_from_filename("test.tiff") == "TIFF"
>>> assert get_fileformat_from_filename("test.bmp") == "BMP"
>>> assert get_fileformat_from_filename("test.dib") == "BMP"
>>> assert get_fileformat_from_filename(
...     "/some/where/test.png") == "PNG"
thumbnailfield.utils.get_processed_image(f, img, patterns)[source]

process PIL image with pattern attribute

f -- ThumbnailFieldFile instance
img -- PIL Image instance
patterns -- Process patterns

pattern format is shown below:

# Use default process_method with default process options and same
# width, height
pattern = [square_size]
# Use default process_method with default process options and width,
# height
pattern = [width, height]
# Use process_method with default process options and width, height
pattern = [width, height, process_method]
# Use process_method with process_options with widht, height
pattern = [width, height, process_method, process_options]

default process_method and process_options are configured in settings.py as:

THUMBNAILFIELD_DEFAULT_PROCESS_METHOD = 'thumbnail'
THUMBNAILFIELD_DEFAULT_PROCESS_OPTIONS = {'filter': Image.ANTIALIAS}
thumbnailfield.utils.get_thumbnail_filename(path, name, pattern=None)[source]

get thumbnail filename with name and pattern

path -- original path
name -- thumbnail name
pattern -- file name generation pattern (default =

settings.THUMBNAILFIELD_FILENAME_PATTERN)

Usage::
>>> path = "/some/where/test.png"
>>> name = "small"
>>> pattern = r"%(root)s/%(filename)s.%(name)s.%(ext)s"
>>> thumb_filename = get_thumbnail_filename(path, name, pattern)
>>> assert thumb_filename == "/some/where/test.small.png"
thumbnailfield.utils.save_to_storage(img, storage, filename, overwrite=False, **kwargs)[source]

save PIL image instance to Django storage with filename

img -- PIL Image instance
storage -- Django storage instance
filename -- filename
overwrite -- If true, delete existing file first
kwargs -- Options used in PIL image save method
Usage::
>>> from thumbnailfield.compatibility import Image
>>> from django.core.files.storage import FileSystemStorage
>>> img = Image.new('RGBA', (100, 100))
>>> storage = FileSystemStorage()
>>> filename = 'test.png'
>>> # save image to storage
>>> filename_ = save_to_storage(img, storage, filename)
>>> # file exists
>>> assert storage.exists(filename_)
>>> # resave
>>> filename_ = save_to_storage(img, storage, filename)
>>> # used different filename
>>> assert filename != filename_
>>> storage.delete(filename_)
>>> # overwrite the file
>>> filename_ = save_to_storage(img, storage, filename, overwrite=True)
>>> assert filename == filename_
>>> storage.delete(filename)