从使用 PIL 旋转的图像中移除黑色 Bars/Excess
Remove Black Bars/Excess from Image rotated with PIL
所以最近我在编写 Python 库时遇到了一个小问题,涉及使用 PIL 旋转图像。
我试图通过在图像上调用 Image#rotate(angle, expand=True)
来旋转我正在加载的图像,这会在图像周围创建奇怪的黑条:
image = Image.open('image.png')
image = image.rotate(angle, expand=True)
这显然对我们来说不理想,因为我们希望图像在没有任何添加或多余的情况下旋转。这显然不是我们想要的。
在答案方面,您发现了很多关于在 rotate 方法上设置 fillcolor 参数的建议。
image.rotate(angle, expand=True, fillcolor=(0, 0, 0, 0))
很明显,这看起来可能是一个解决方案,但是填充颜色不能是 RGBA,所以我们不能传入 alpha 值。
正确的答案是确保您的图像处于正确的模式。即使您加载了支持透明的图像(例如 .png),您仍然会遇到此错误,除非您将图像模式从其默认模式转换为 'RGBA'
,例如:
image = Image.open('image.png').convert('RGBA')
然后允许旋转完全无磨损!
我决定 post 这个 question/answer 组合,因为我搜索了几个小时才找到这个答案,我想我会让遇到我的问题的其他人更容易获得它!
这是我在很久很久以前的一个旧论坛上找到答案的地方:
所以最近我在编写 Python 库时遇到了一个小问题,涉及使用 PIL 旋转图像。
我试图通过在图像上调用 Image#rotate(angle, expand=True)
来旋转我正在加载的图像,这会在图像周围创建奇怪的黑条:
image = Image.open('image.png')
image = image.rotate(angle, expand=True)
这显然对我们来说不理想,因为我们希望图像在没有任何添加或多余的情况下旋转。这显然不是我们想要的。
在答案方面,您发现了很多关于在 rotate 方法上设置 fillcolor 参数的建议。
image.rotate(angle, expand=True, fillcolor=(0, 0, 0, 0))
很明显,这看起来可能是一个解决方案,但是填充颜色不能是 RGBA,所以我们不能传入 alpha 值。
正确的答案是确保您的图像处于正确的模式。即使您加载了支持透明的图像(例如 .png),您仍然会遇到此错误,除非您将图像模式从其默认模式转换为 'RGBA'
,例如:
image = Image.open('image.png').convert('RGBA')
然后允许旋转完全无磨损!
我决定 post 这个 question/answer 组合,因为我搜索了几个小时才找到这个答案,我想我会让遇到我的问题的其他人更容易获得它!
这是我在很久很久以前的一个旧论坛上找到答案的地方: