烧瓶图像生成一些图像的图像误差



我已经建立了一个烧瓶站点,它已经工作了一年多,但在使用烧瓶图像生成调整大小的图像时,我刚刚遇到了一个图像没有正确调整大小。静态图像加载正确,所以我只能假设烧瓶图像大小调整有误。我找不到任何方法来查看确切的错误,所以我有点陷入了故障排除。如有任何帮助,我们将不胜感激。

错误:无法显示图像[image],因为它包含错误。

破损图像示例:

调整大小的URL:https://www.eskimotv.net/imgsizer/img/cover-images/zack-snyder-s-justice-league-still-sucks-2021-cover-image.jpg?h=466&m=作物&v=YHMxhA&w=994&s=b%27vYAlpffxM8wbfIREZG62hM5XzIw%27

正在运行的静态资源:https://www.eskimotv.net/static/img/cover-images/zack-snyder-s-justice-league-still-sucks-2021-cover-image.jpg

它对其他图像工作良好的例子:

调整大小的URL:https://www.eskimotv.net/imgsizer/img/cover-images/hellboy-2019-cover-image.jpg?h=466&m=作物&v=Xtmyyw&w=994&s=b%27JYX9u5-jNkVgzcqvZlA-kObl7QU%27

静态资源:https://www.eskimotv.net/static/img/cover-images/hellboy-2019-cover-image.jpg

调整代码大小:

<img class="img-responsive webfeedsFeaturedVisual" src="{{ resized_img_src(article.image,width=994,height=466,mode='crop') }}" alt="{{ article.title }} Cover">

编辑:

通过在本地运行服务器并查看错误日志,我能够在烧瓶图像试图生成调整大小的图像的缓存版本时识别以下错误:

web_1  | 172.18.0.1 - - [13/Apr/2021 02:06:54] "GET /imgsizer/img/cover-images/short-cover-image.jpg?h=466&m=crop&v=YHT8vQ&w=994&s=b%27U8Rbw9xy3J63t0mPW3NHN
aNfSCo%27 HTTP/1.1" 500 -
web_1  | Traceback (most recent call last):
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/PIL/JpegImagePlugin.py", line 633, in _save
web_1  |     rawmode = RAWMODE[im.mode]
web_1  | KeyError: 'RGBA'
web_1  |
web_1  | The above exception was the direct cause of the following exception:
web_1  |
web_1  | Traceback (most recent call last):
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 2464, in __call__
web_1  |     return self.wsgi_app(environ, start_response)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
web_1  |     response = self.handle_exception(e)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
web_1  |     reraise(exc_type, exc_value, tb)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
web_1  |     raise value
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
web_1  |     response = self.full_dispatch_request()
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
web_1  |     rv = self.handle_user_exception(e)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
web_1  |     reraise(exc_type, exc_value, tb)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
web_1  |     raise value
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
web_1  |     rv = self.dispatch_request()
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
web_1  |     return self.view_functions[rule.endpoint](**req.view_args)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/flask_images/core.py", line 428, in handle_request
web_1  |     image.save(cache_file, format, quality=quality)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/PIL/Image.py", line 2172, in save
web_1  |     save_handler(self, fp, filename)
web_1  |   File "/home/eskimotv/venv/lib/python3.8/site-packages/PIL/JpegImagePlugin.py", line 635, in _save
web_1  |     raise OSError(f"cannot write mode {im.mode} as JPEG") from e
web_1  | OSError: cannot write mode RGBA as JPEG

问题1:关于查找和查看错误:我能够通过本地运行烧瓶服务器并查看日志来查找和查看由pillow生成的错误。我将把全部错误加在这个问题上。

问题2:关于图像的问题。生成错误的图像在保存到静态目录时有某种alpha层,即使它是以jpg格式保存的。虽然我对生成缓存的调整大小的图像的烧瓶图像方法没有透明度,但我确实可以访问将外部图像保存到服务器的方法。因此,在保存静态内容时,我只是在本地保存图像的方法中添加了这一行,以便在保存图像之前对其进行转换:

img = img.convert("RGB")

这是基于Python Pillow的这个问题:

https://github.com/python-pillow/Pillow/issues/2609

通过这种方式,静态源通过丢弃透明层与烧瓶图像的调整大小的图像方法完全兼容。

最新更新