sorl-thumbnail 生成黑线和不需要的作物
Sorl-thumbnail generates black lines and undesired crops
我在 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
p.s。
试图将原件作为图片上传到此处,但它被自动转换为肖像..这是否意味着什么?
框架出现是因为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
。在这种情况下,图像只是停止旋转。并且不再创建黑线。
此错误已在 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
我在 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
p.s。 试图将原件作为图片上传到此处,但它被自动转换为肖像..这是否意味着什么?
框架出现是因为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
。在这种情况下,图像只是停止旋转。并且不再创建黑线。
此错误已在 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