使用 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 的奇怪结果

sh 使用sips命令行Mac OS X调整JPG图像的大小

递归调整jpg大小

使用 ffmpeg 调整图像大小

使用具有最大宽度/高度的 ImageMagick 调整大小

所有图像到JPG/JPeG转换器和大小调整器