Sorl-thumbnail: ┬лOSError: рдореЛрдб рдЖрд░рдЬреАрдмреАрдП рдХреЛ рдЬреЗрдкреАрдИрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛┬╗ рдЬрдм рдореЛрдб рдореЗрдВ рдкреАрдПрдирдЬреА рдХреЗ рд▓рд┐рдП get_thumbnail = рдкреА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рд╕рд┐рддре░ 2018  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jazzband/sorl-thumbnail

рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛?

рдореЛрдб = рдкреА (рдЕрдиреБрдХреНрд░рдорд┐рдд рд░рдВрдЧ?) рдореЗрдВ рдкреАрдПрдирдЬреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдердВрдмрдиреЗрд▓ (рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЬреЗрдкреАрдИрдЬреА) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
(рдпрд╣ рдореЛрдб = рдЖрд░рдЬреАрдмреАрдП рдХреЗ рд╕рд╛рде рдкреАрдПрдирдЬреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЛрдб = рдкреА рдирд╣реАрдВ)

рдореБрдЭреЗ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА?

рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рдердВрдмрдиреЗрд▓ рд╕рд╣реЗрдЬрдирд╛, рдЕрд▓реНрдлрд╝рд╛-рдЪреИрдирд▓ рдХреЛ рдХрд┐рд╕реА рд░рдВрдЧ рдХреА рдареЛрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕рдорддрд▓ рдХрд░рдирд╛ (рдЙрджрд╛. THUMBNAIL_PADDING_COLOR, рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рдпрд╛ 'рд╕рдлрд╝реЗрдж')ред

рдкрд░реАрдХреНрд╖рдг рдЫрд╡рд┐

5847e9aacef1014c0b5e4828
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

рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо

cor

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ PNG рдкреНрд░рд╛рд░реВрдк рдердВрдмрдиреЗрд▓ рд░рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

THUMBNAIL_PRESERVE_FORMAT = True

рдпрд╣ рдкреАрдПрдирдЬреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреАрдПрдирдЬреА рдердВрдмрдиреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрд░рдЬреАрдмреАрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рд╕рднреА 7 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреАрдЖрд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

Django рдмрд╛рдХреА рдврд╛рдВрдЪреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореБрдЭреЗ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ @stopdesign рдХрд╣рд╛рдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ PNG рдкреНрд░рд╛рд░реВрдк рдердВрдмрдиреЗрд▓ рд░рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

THUMBNAIL_PRESERVE_FORMAT = True

рдпрд╣ рдкреАрдПрдирдЬреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреАрдПрдирдЬреА рдердВрдмрдиреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрд░рдЬреАрдмреАрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рдЕрднреА рддрдХ рд╕рд╛рдордпрд┐рдХ :)

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд╕реЙрд░рд▓ рдиреЗ рдкрд╣рд▓реЗ рдареАрдХ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдмреЗрд╣рддрд░ рдерд╛?

рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╣реИ рдХрд┐ рдПрд╕рдУрдЖрд░рдПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╣реЗрдбрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдкрд┐рд▓реЛ рдкреНрд░рд╛рд░реВрдк рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдХ jpg рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдкреАрдПрдирдЬреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд▓рдд рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ рддреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб THUMBNAIL_PRESERVE_FORMAT = True рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдкреИрдЪ рдЗрдВрдЬрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдЧрд╛, рдореБрдЭреЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдореБрджреНрджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдлрд┐рдХреНрд╕ рд╣реЛрдЧрд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

nuschk picture nuschk  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Flimm picture Flimm  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DarwinSurvivor picture DarwinSurvivor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kevin-brown picture kevin-brown  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ