рдореЛрдб = рдкреА (рдЕрдиреБрдХреНрд░рдорд┐рдд рд░рдВрдЧ?) рдореЗрдВ рдкреАрдПрдирдЬреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдердВрдмрдиреЗрд▓ (рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЬреЗрдкреАрдИрдЬреА) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
(рдпрд╣ рдореЛрдб = рдЖрд░рдЬреАрдмреАрдП рдХреЗ рд╕рд╛рде рдкреАрдПрдирдЬреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЛрдб = рдкреА рдирд╣реАрдВ)
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рдердВрдмрдиреЗрд▓ рд╕рд╣реЗрдЬрдирд╛, рдЕрд▓реНрдлрд╝рд╛-рдЪреИрдирд▓ рдХреЛ рдХрд┐рд╕реА рд░рдВрдЧ рдХреА рдареЛрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕рдорддрд▓ рдХрд░рдирд╛ (рдЙрджрд╛. THUMBNAIL_PADDING_COLOR, рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рдпрд╛ 'рд╕рдлрд╝реЗрдж')ред
https://user-images.githubusercontent.com/244666/45594613-a5aba780-b9a6-11e8-9321-da6710f9fb4f.png
>>> i = Image.open('forbes.png')
>>> i
<PIL.PngImagePlugin.PngImageFile image mode=P size=400x400 at 0x7FE650252CC0>
>>> get_thumbnail(i, '100x106', crop='center', quality=99, format='PNG')
<sorl.thumbnail.images.ImageFile at 0x7fe6501d6390>
>>> get_thumbnail(i, '100x100', crop='center', quality=99, format='JPEG')
OSError: cannot write mode RGBA as JPEG
рдкрд╛рдпрдерди == 3.6.5
рддрдХрд┐рдпрд╛ == 5.2.0 (рдпрд╛ рдХреЛрдИ рднреА рд╕рдВрд╕реНрдХрд░рдг>= 4.2.0)
рд╕реЙрд░рд▓-рдердВрдмрдиреЗрд▓ == 12.4.1
https://github.com/python-pillow/Pillow/issues/2609
рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
def _colorspace(self, image, colorspace, format):
if colorspace == 'RGB':
# Pillow JPEG doesn't allow RGBA anymore. It was converted to RGB before.
if image.mode == 'RGBA' and format != 'JPEG':
return image # RGBA is just RGB + Alpha
if image.mode == 'LA' or (image.mode == 'P' and 'transparency' in image.info):
if format == 'JPEG':
newimage = Image.new('RGB', image.size, '#eebbaa')
mask = image.convert('RGBA').split()[-1]
newimage.paste(image.convert('RGBA'), (0, 0), mask)
else:
newimage = image.convert('RGBA')
transparency = image.info.get('transparency')
if transparency is not None:
mask = image.convert('RGBA').split()[-1]
newimage.putalpha(mask)
return newimage
return image.convert('RGB')
if colorspace == 'GRAY':
return image.convert('L')
return image
рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреАрдЖрд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
Django рдмрд╛рдХреА рдврд╛рдВрдЪреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореБрдЭреЗ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ @stopdesign рдХрд╣рд╛рдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ PNG рдкреНрд░рд╛рд░реВрдк рдердВрдмрдиреЗрд▓ рд░рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
THUMBNAIL_PRESERVE_FORMAT = True
рдпрд╣ рдкреАрдПрдирдЬреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреАрдПрдирдЬреА рдердВрдмрдиреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрд░рдЬреАрдмреАрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
рдЕрднреА рддрдХ рд╕рд╛рдордпрд┐рдХ :)
рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд╕реЙрд░рд▓ рдиреЗ рдкрд╣рд▓реЗ рдареАрдХ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдмреЗрд╣рддрд░ рдерд╛?
рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╣реИ рдХрд┐ рдПрд╕рдУрдЖрд░рдПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╣реЗрдбрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдкрд┐рд▓реЛ рдкреНрд░рд╛рд░реВрдк рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдХ jpg рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдкреАрдПрдирдЬреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд▓рдд рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ рддреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб THUMBNAIL_PRESERVE_FORMAT = True
рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдкреИрдЪ рдЗрдВрдЬрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдЧрд╛, рдореБрдЭреЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдореБрджреНрджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдлрд┐рдХреНрд╕ рд╣реЛрдЧрд╛?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ PNG рдкреНрд░рд╛рд░реВрдк рдердВрдмрдиреЗрд▓ рд░рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
THUMBNAIL_PRESERVE_FORMAT = True
рдпрд╣ рдкреАрдПрдирдЬреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреАрдПрдирдЬреА рдердВрдмрдиреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрд░рдЬреАрдмреАрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред