使用 PIL.resize 调整 JPG 大小会得到一个完全黑色的图像
Posted
技术标签:
【中文标题】使用 PIL.resize 调整 JPG 大小会得到一个完全黑色的图像【英文标题】:Resizing JPG using PIL.resize gives a completely black image 【发布时间】:2019-07-16 07:39:36 【问题描述】:我正在使用 PIL 来调整 JPG 的大小。我期待相同的图像,调整为输出大小,但我得到了一个大小正确的黑匣子。新的图像文件完全没有任何信息,只是一个空文件。这是我的脚本的摘录:
basewidth = 300
img = Image.open(path_to_image)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize))
img.save(dir + "/the_image.jpg")
我尝试使用 Image.LANCZOS 作为第二个参数来调整大小(默认为 Image.NEAREST 和 1 个参数),但这并没有什么不同。我在 Ubunutu 16.04 上运行 Python3。关于为什么图像文件为空的任何想法?
【问题讨论】:
代码在基于 Ubuntu 的 Linux Mint 19.1 上为我提供了正确的图像。也许你使用黑色图像或者你检查错误的图像。检查print(path_to_image, dir + "/the_image.jpg")
并打开两个图像。
@furas 这很奇怪。我检查了图像路径,它们是正确的。输入图像看起来不错,但输出图像现在包含一些信息。仍然显示全黑。
删除输出图像,看看你是否再次得到它。您还可以重命名输入文件名并在代码中更改其名称,以查看您是否从正确的文件夹中读取。
或者您可以在更改之前使用不同的名称保存img
,然后查看您是否在预期文件夹中获取了此文件,并查看更改前您在此文件中的内容。
@furas 打开图片后,我立即尝试保存。它保留了原始图像大小,但完全是黑色的。
【参考方案1】:
在尝试调整具有透明背景的图像大小时,我也遇到了同样的问题。在我为图像添加白色背景后,“调整大小”起作用。
添加白色背景然后调整图像大小的代码:
from PIL import Image
im = Image.open("path/to/img")
if im.mode == 'RGBA':
alpha = im.split()[3]
bgmask = alpha.point(lambda x: 255-x)
im = im.convert('RGB')
im.paste((255,255,255), None, bgmask)
im = im.resize((new_width, new_height), Image.ANTIALIAS)
参考:
Other's code for making thumbnail
Python: Image resizing: keep proportion - add white background
【讨论】:
【参考方案2】:查明真相的最简单方法是发布您的图片!否则,我们可以检查您图片的各个方面。
因此,导入 Numpy 和 PIL,打开您的图像并将其转换为 Numpy ndarray
,然后您可以检查其特征:
import numpy as np
from PIL import Image
# Open image
img = Image.open('unhappy.jpg')
# Convert to Numpy Array
n = np.array(img)
现在您可以打印和检查以下内容:
n.shape # we are expecting something like (1580, 1725, 3)
n.dtype # we expect dtype('uint8')
n.max() # if there's white in the image, we expect 255
n.min() # if there's black in the image, we expect 0
n.mean() # we expect some value between 50-200 for most images
【讨论】:
这个运气好吗?以上是关于使用 PIL.resize 调整 JPG 大小会得到一个完全黑色的图像的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP GD lib 压缩和调整图像大小不适用于 png 和 jpg 的奇怪结果