我正在使用easy-thumbnails Django应用将一些图像转换为灰度。他们中的大多数都很好,但少数人正在部分或完全搞砸。在两台不同的机器上发生了同样的错误,因此我认为这不是PIL安装损坏或其他问题。
以下是几个例子:
Original image http://66.228.39.122/uploads/companies/alerts_logo.png Disorted version http://66.228.39.122/uploads/companies/alerts_logo.png.198x150_q85_bw_upscale.jpg
Original image http://66.228.39.122/uploads/companies/HashableLogo_Color_RGB.png Disorted version http://66.228.39.122/uploads/companies/HashableLogo_Color_RGB.png.198x150_q85_bw_upscale.jpg
有什么建议吗?原始图像本身是否以某种微妙的方式腐败?我应该用--no-random-distort或其他东西重新编译PIL吗?我看了the relevant part of the easy-thumbnails source,它只是调用image.convert('L'),所以我认为问题必须在PIL内或图像本身。 Alerts.com徽标中感叹号扭曲的方式让我觉得可能存在某种编码问题,因为感叹号的轮廓是倾斜的,其颜色似乎有助于更大的灰色斑点...但是Hashable徽标没有显示完全相同的问题。也许他们是两个不同的问题。感谢您提出任何建议/意见/建议。
更新:实际上,如果我删除bw
过滤器并添加replace_alpha="red"
我会得到类似(虽然不是灰度)的扭曲,所以看起来它可能是PIL不满意图像是如何编码的。不幸的是,我需要非技术人员才能上传新图像并让它们正常工作,因此需要编程解决方案,而不仅仅是手动重新保存图像。
更新2 :我实际上进行了一些实验,发现用GIMP重新保存PNG解决了这个问题,如果我重新保存一次并选中保存透明像素的颜色信息的框,然后重新保存第二次没有选中该框。只做第一个或第二个并不能解决问题,做两个然后第一个再次重新导致它。它仍然不能很好地处理部分透明度。由于这是繁琐且不完美的,如果有任何PIL或PNG编码高手,那么编程解决方案仍然会很棒。