Django рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫрд╡рд┐ рд╣реЗрд░рдлреЗрд░



Imagekit рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореВрд▓ рдЫрд╡рд┐ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЖрдкрдХреЗ рдкрд╛рд╕ рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕реНрд░реЛрдд рдкрд░ рд▓реМрдЯрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ, рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрдирд╛рдиреЗ, рд╡реЙрдЯрд░рдорд╛рд░реНрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕реНрдерд╛рдкрдирд╛

Imagekit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ PIL рдпрд╛ PILLOW рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╣рдо PyPI рд╕реЗ рдЖрддреЗ рд╣реИрдВ:
pip install django-imagekit 

INSTALLED_APPS рдореЗрдВ 'рдЗрдореЗрдЬрдХрд┐рдЯ' рдЬреЛрдбрд╝реЗрдВ

рдореЙрдбрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
 import PIL ... from PIL import Image from imagekit.models.fields import ImageSpecField from imagekit.processors import ResizeToFit, Adjust,ResizeToFill class Jobseeker(models.Model): def get_file_path(self, filename): extension = filename.split('.')[-1] filename = "%s.%s" % (uuid.uuid4(), extension) return os.path.join("images", filename) ... photo = models.ImageField(verbose_name=u'Poster',upload_to=get_file_path,max_length=256, blank=True, null=True) photo_small =ImageSpecField([Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(50, 50)], image_field='photo', format='JPEG', options={'quality': 90}) photo_medium =ImageSpecField([Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(300, 200)], image_field='photo', format='JPEG', options={'quality': 90}) photo_big =ImageSpecField([Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(640, 480)], image_field='photo', format='JPEG', options={'quality': 90}) 

рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ

View.py рдореЗрдВ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ
 def some_def(request): ... photo = Jobseeker.objects.get() ... return (render_to_response('jobseeker/resume_template.html', { ... 'photo': photo, ... }, context_instance=RequestContext(request)) ) 

рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 photo.photo_small.url #   5050 photo.photo_medium.url #     300200 photo.photo_big.url #     640480 #      photo.photo_small.width # 50 photo.photo.width #    


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ 2 рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ: ResizeToFit рдФрд░ ResizeToFillред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рд╣реИрдВ - рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЙрдбреНрдпреВрд▓

 ResizeToFit(width=None, height=None, upscale=None, mat_color=None, anchor='c') 

рдЙрджреНрджреЗрд╢реНрдп: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕ рдкрд░ рдореВрд▓ рдЫрд╡рд┐ рдХреЛ рдЖрдиреБрдкрд╛рддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реНрд░реЗрдореЛрдВ рд╕реЗ рдкрд░реЗ рди рдЬрд╛рдПред
рдЪреМрдбрд╝рд╛рдИ = рдХреЛрдИ рдирд╣реАрдВ, рдКрдБрдЪрд╛рдИ = рдХреЛрдИ рдирд╣реАрдВ - рдХреНрд░рдорд╢рдГ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдБрдЪрд╛рдИред
upscale - рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЫрд╡рд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЫреЛрдЯрд╛ рд╣реЛрдиреЗ рдкрд░ рдмрдбрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
mat_color - рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЕрдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд░рдВрдЧ рднрд░реЗрдВред

 ResizeToFill(width, height) 

рдЙрджреНрджреЗрд╢реНрдп: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рд╕реЗ рдЖрдЧреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреНрд░рдорд╢рдГ рд╢рд┐рдирд┐рд░рд╛ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред

рдХрд╛рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг

рдореВрд▓ рдлреЛрдЯреЛ



ResizeToFill


рдирдИ рдЫрд╡рд┐ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдпрд╛рдореЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП mat_color рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ResizeToFit



Imagekit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╕реНрд╡реАрд░реЗрдВ рдХреИрд╢ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИрдВ, рд╕рднреА рдореВрд▓ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╡реЗ рдЙрд╕ рдкреГрд╖реНрда рдХреА рдкрд╣рд▓реА рдпрд╛рддреНрд░рд╛ рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╕рдордп, рд╕рднреА рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдореВрд▓ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреА рдирд╕реЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЕрдЪрд╛рдирдХ рд╕рд╣реА рдирд╣реАрдВ рдереАрдВ, рдФрд░ рдореВрд▓ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдВрджрд░реНрдн:
Github
рдкреНрд░рд▓реЗрдЦрди

Source: https://habr.com/ru/post/In159513/


All Articles