mirror of
https://github.com/Hopiu/django-imagekit.git
synced 2026-03-17 05:40:25 +00:00
142 lines
2.8 KiB
ReStructuredText
142 lines
2.8 KiB
ReStructuredText
|
|
.. _ref-tutorial:
|
||
|
|
|
||
|
|
ImageKit in 7 Steps
|
||
|
|
===================
|
||
|
|
|
||
|
|
Step 1
|
||
|
|
******
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
$ pip install django-imagekit
|
||
|
|
|
||
|
|
(or clone the source and put the imagekit module on your path)
|
||
|
|
|
||
|
|
Step 2
|
||
|
|
******
|
||
|
|
|
||
|
|
Add ImageKit to your models.
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
# myapp/models.py
|
||
|
|
|
||
|
|
from django.db import models
|
||
|
|
from imagekit.models import ImageModel
|
||
|
|
|
||
|
|
class Photo(ImageModel):
|
||
|
|
name = models.CharField(max_length=100)
|
||
|
|
original_image = models.ImageField(upload_to='photos')
|
||
|
|
num_views = models.PositiveIntegerField(editable=False, default=0)
|
||
|
|
|
||
|
|
class IKOptions:
|
||
|
|
# This inner class is where we define the ImageKit options for the model
|
||
|
|
spec_module = 'myapp.specs'
|
||
|
|
cache_dir = 'photos'
|
||
|
|
image_field = 'original_image'
|
||
|
|
save_count_as = 'num_views'
|
||
|
|
|
||
|
|
Step 3
|
||
|
|
******
|
||
|
|
|
||
|
|
Create your specifications.
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
# myapp/specs.py
|
||
|
|
|
||
|
|
from imagekit.specs import ImageSpec
|
||
|
|
from imagekit import processors
|
||
|
|
|
||
|
|
# first we define our thumbnail resize processor
|
||
|
|
class ResizeThumb(processors.Resize):
|
||
|
|
width = 100
|
||
|
|
height = 75
|
||
|
|
crop = True
|
||
|
|
|
||
|
|
# now we define a display size resize processor
|
||
|
|
class ResizeDisplay(processors.Resize):
|
||
|
|
width = 600
|
||
|
|
|
||
|
|
# now let's create an adjustment processor to enhance the image at small sizes
|
||
|
|
class EnchanceThumb(processors.Adjustment):
|
||
|
|
contrast = 1.2
|
||
|
|
sharpness = 1.1
|
||
|
|
|
||
|
|
# now we can define our thumbnail spec
|
||
|
|
class Thumbnail(ImageSpec):
|
||
|
|
access_as = 'thumbnail_image'
|
||
|
|
pre_cache = True
|
||
|
|
processors = [ResizeThumb, EnchanceThumb]
|
||
|
|
|
||
|
|
# and our display spec
|
||
|
|
class Display(ImageSpec):
|
||
|
|
increment_count = True
|
||
|
|
processors = [ResizeDisplay]
|
||
|
|
|
||
|
|
Step 4
|
||
|
|
******
|
||
|
|
|
||
|
|
Flush the cache and pre-generate thumbnails (ImageKit has to be added to ``INSTALLED_APPS`` for management command to work).
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
$ python manage.py ikflush myapp
|
||
|
|
|
||
|
|
Step 5
|
||
|
|
******
|
||
|
|
|
||
|
|
Use your new model in templates.
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
<div class="original">
|
||
|
|
<img src="{{ photo.original_image.url }}" alt="{{ photo.name }}">
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="display">
|
||
|
|
<img src="{{ photo.display.url }}" alt="{{ photo.name }}">
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="thumbs">
|
||
|
|
{% for p in photos %}
|
||
|
|
<img src="{{ p.thumbnail_image.url }}" alt="{{ p.name }}">
|
||
|
|
{% endfor %}
|
||
|
|
</div>
|
||
|
|
|
||
|
|
Step 6
|
||
|
|
******
|
||
|
|
|
||
|
|
Play with the API.
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
>>> from myapp.models import Photo
|
||
|
|
>>> p = Photo.objects.all()[0]
|
||
|
|
<Photo: MyPhoto>
|
||
|
|
>>> p.display.url
|
||
|
|
u'/static/photos/myphoto_display.jpg'
|
||
|
|
>>> p.display.width
|
||
|
|
600
|
||
|
|
>>> p.display.height
|
||
|
|
420
|
||
|
|
>>> p.display.image
|
||
|
|
<JpegImagePlugin.JpegImageFile instance at 0xf18990>
|
||
|
|
>>> p.display.file
|
||
|
|
<File: /path/to/media/photos/myphoto_display.jpg>
|
||
|
|
>>> p.display.spec
|
||
|
|
<class 'myapp.specs.Display'>
|
||
|
|
|
||
|
|
Step 7
|
||
|
|
******
|
||
|
|
|
||
|
|
Enjoy a nice beverage.
|
||
|
|
|
||
|
|
::
|
||
|
|
|
||
|
|
from refrigerator import beer
|
||
|
|
|
||
|
|
beer.enjoy()
|
||
|
|
|
||
|
|
|