【问题标题】:Sorl-thumbnail generates black lines and undesired cropsSorl-thumbnail 生成黑线和不需要的裁剪
【发布时间】:2017-08-04 08:44:07
【问题描述】:

我在一个 django 项目中使用 Sorl Thumbnail 12.4a1, Pillow 4.0.0

它适用于大多数图像,但对于其中一些我会遇到意外行为。

原图为人像 jpg 765x1110

运行此代码后:get_thumbnail('/media/ryzsUIKZVUc.jpg', '464', upscale=False)

我收到一张 464x320 的图像,左右两侧为黑色背景,顶部和底部均被裁剪

这是原文: https://www.dropbox.com/s/ia7906ec19xjhro/ryzsUIKZVUc.jpg?dl=0

结果如下:https://www.dropbox.com/s/adgut5zkw4xln6e/62b2439654a00312defafddb862eda9b.jpg?dl=0

附言 尝试将原图作为图像上传到此处,但它被自动转换为肖像..这意味着什么吗?

【问题讨论】:

    标签: python django sorl-thumbnail


    【解决方案1】:

    框架出现是因为 exif 标签。图像大小未正确确定。

    你可以使用exiftool看到这个:

    $ exiftool ryzsUIKZVUc.jpg 
    ExifTool Version Number         : 10.10
    File Name                       : ryzsUIKZVUc.jpg
    Directory                       : .
    File Size                       : 210 kB
    File Modification Date/Time     : 2017:03:30 12:33:51+03:00
    File Access Date/Time           : 2017:03:30 12:33:55+03:00
    File Inode Change Date/Time     : 2017:03:30 12:33:51+03:00
    File Permissions                : rw-rw-r--
    File Type                       : JPEG
    File Type Extension             : jpg
    MIME Type                       : image/jpeg
    JFIF Version                    : 1.01
    Comment                         : CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 99.
    Exif Byte Order                 : Big-endian (Motorola, MM)
    Processing Software             : Windows Photo Editor 10.0.10011.16384
    Orientation                     : Rotate 270 CW
    Software                        : Windows Photo Editor 10.0.10011.16384
    Modify Date                     : 2017:03:07 09:28:15
    Date/Time Original              : 2017:03:07 09:27:46
    Create Date                     : 2017:03:07 09:27:46
    Sub Sec Time Original           : 00
    Sub Sec Time Digitized          : 00
    Color Space                     : sRGB
    Padding                         : (Binary data 2060 bytes, use -b option to extract)
    Compression                     : JPEG (old-style)
    X Resolution                    : 96
    Y Resolution                    : 96
    Resolution Unit                 : inches
    Thumbnail Offset                : 4608
    Thumbnail Length                : 8169
    About                           : uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b
    Creator Tool                    : Windows Photo Editor 10.0.10011.16384
    Image Width                     : 1110
    Image Height                    : 765
    Encoding Process                : Baseline DCT, Huffman coding
    Bits Per Sample                 : 8
    Color Components                : 3
    Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
    Image Size                      : 1110x765
    Megapixels                      : 0.849
    Create Date                     : 2017:03:07 09:27:46.00
    Date/Time Original              : 2017:03:07 09:27:46.00
    Thumbnail Image                 : (Binary data 8169 bytes, use -b option to extract)
    

    或使用PIL

    >>> from PIL import Image
    >>> from PIL.ExifTags import TAGS
    >>> 
    >>> im = Image.open('ryzsUIKZVUc.jpg')
    >>> exif = im._getexif()
    >>> data = {}
    >>> 
    >>> for tag, value in exif.items():
    ...     decoded = TAGS.get(tag, tag)
    ...     data[decoded] = value
    ... 
    >>> 
    >>> data['Orientation']
    8
    

    要解决这个问题,您可以在生成预览之前,(旋转图像)保存没有此标记的图片。

    例如,

    def orient(image_path):
        """ Check are this img oriented """
        img = Image.open(image_path)
        # check is has exif data
        if not hasattr(img, '_getexif') or img._getexif() is None:
            return
        # if has information - try rotate img
        orientation = img._getexif().get(0x112)
        rotate_values = {3: 180, 6: 270, 8: 90}
        if orientation in rotate_values:
            img = img.rotate(rotate_values[orientation], expand=True)
        img.save(image_path, quality=100)
    

    或者更简单,更改设置THUMBNAIL_ORIENTATION = False。在这种情况下,图像只是停止旋转。并且不再创建黑线。

    【讨论】:

      【解决方案2】:

      此错误已在 github 的存储库中修复。 此公关https://github.com/mariocesar/sorl-thumbnail/pull/233

      但在 pypi 中仍然是一个旧包。 https://pypi.python.org/pypi/sorl-thumbnail/12.4a1于2015-11-17更新

      要使用新版本,请直接从 github 安装包。

      pip install -e git+https://github.com/mariocesar/sorl-thumbnail.git#egg=sorl-thumbnail
      

      安装完成后,需要清除图片缓存

      $ rm -rf path/to/media/cache/
      $ python manage.py thumbnail clear
      $ python manage.py thumbnail cleanup
      

      【讨论】:

      • 试过这个版本,但得到了相同的结果:(
      猜你喜欢
      • 2010-12-03
      • 2015-01-01
      • 2014-01-03
      • 2017-06-14
      • 2010-11-24
      • 2011-05-20
      • 2019-10-14
      • 2011-09-12
      • 2012-11-22
      相关资源
      最近更新 更多