在Python中调整图片大小

6

我能否使用Python调整图像的大小,并指定高度和宽度?我使用的是Python 2.5版本,我尝试了这个教程http://effbot.org/imagingbook/introduction.htm,并安装了PIL库来处理图像,但是当我尝试写下以下代码时:

import Image
im = Image.open("test.jpg")

我从import:open中得到了未定义的变量,虽然import Image没有出错?提前感谢。

6个回答

7

你的导入似乎存在问题。请使用以下代码替换 "import Image":

from PIL import Image

然后继续这样做:
image = Image.open('/example/path/to/image/file.jpg/')
image.thumbnail((80, 80), Image.ANTIALIAS)
image.save('/some/path/thumb.jpg', 'JPEG', quality=88)

我对此感到非常惊讶,因为即使在 PIL 网站上,甚至教程也显示仅使用 import Image 应该可以工作。这是新版 PIL 的问题吗?我已经使用 PIL 一年多了,只用 import Image 导入过它,从来没有遇到过问题... - ely
我正在使用2.6和2.7版本。我认为这不是Python版本的问题,除非您正在使用较旧的PIL版本。您的PIL版本是多少?我的是1.1.7。 - ely
如果您正在使用Linux系统,那么确保PIL .so文件出现在正确的distutils文件夹中可能很简单。这可能会在Linux安装脚本中自动处理,但在其他平台上可能不会。 - ely
@EMS:我最近安装了最新版本,但是当我尝试按照上面的教程调整图像大小时,使用代码'out = im.resize((128, 128))'时,提示resize方法未定义? - Computer_Engineer
是的,对我来说,PIL一直是一个头疼的问题。我尝试只使用Mahotas库结合scikits.image来避免需要使用"PIL"和"OpenCV"所需的"特殊"类型图像。我希望我的图像始终只是NumPy数组,而不需要处理它。 - ely
显示剩余5条评论

3

如果您需要使用:刚在官方Pillow网站上发现了这一点。您可能使用的是Pillow而不是PIL。

警告

Pillow >= 1.0不再支持“import Image”。请改用“from PIL import Image”。


1
  • you can resize image using skimage

    from skimage.transform import resize
    import matplotlib.pyplot as plt
    
    img=plt.imread('Sunflowers.jpg')
    image_resized =resize(img, (244, 244))
    
  • plotting resized image

    plt.subplot(1,2,1)
    plt.imshow(img)
    plt.title('original image')
    
    plt.subplot(1,2,2)
    plt.imshow(image_resized)
    plt.title('image_resized')
    


这并没有真正回答问题,而是提出了另一种方法。它可能有用,但并不是直接的答案。 - tonjo

1

这个脚本可以调整给定文件夹中的所有图片大小:

import PIL
from PIL import Image
import os, sys
path = "path"
dirs = os.listdir( path )
def resize():
    for item in dirs:
        if os.path.isfile(path+item):
            img = Image.open(path+item)
            f, e = os.path.splitext(path+item)
            img = img.resize((width,hight ), Image.ANTIALIAS)
            img.save(f + '.jpg') 
resize()

0
import os
from PIL import Image

imagePath = os.getcwd() + 'childFolder/myImage.png'
newPath = os.getcwd() + 'childFolder/newImage.png'
cropSize = 150, 150

img = Image.open(imagePath)
img.thumbnail(cropSize, Image.ANTIALIAS)
img.save(newPath)

0
如果您在使用PIL时遇到了问题,另一个选择可能是scipy.misc库。假设您想将图像调整为48x48大小,并且该图像位于与脚本相同的目录中。
from from scipy.misc import imread
from scipy.misc import imresize

然后:

img = imread('./image_that_i_want_to_resize.jpg')
img_resized = imresize(img, [48, 48])

请注意,在scipy.org上它说_imread已被弃用!在SciPy 1.0.0中,imread已被弃用,并将在1.2.0中删除。请改用imageio.imread。 - virtualxtc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接