首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误模块‘object’没有属性'LANCZOS

错误模块‘object’没有属性'LANCZOS
EN

Stack Overflow用户
提问于 2016-12-11 01:25:04
回答 4查看 2.5K关注 0票数 1

我想将图像大小调整为28*28像素的.jpeg。我使用名为PIL的模块来调整图片的大小:我创建了这个类:

代码语言:javascript
复制
from PIL import Image

#import PIL
import numpy
from resizeimage import resizeimage

import scipy.misc

''' This class is to resize input image to MNIST size (28x28 px) '''


class Resize_img:
    def __init__(self, imageName):
        print 'Image -- ', imageName
        self.resized_image = ''
        # resize img to mnist size [28x28]
        #with open(imageName,'r+b') as f:
        #    with Image.open(f) as image:
    image = Image.open(imageName)        
        cover = resizeimage.resize_cover(image, [28, 28])
        self.resized_image = 'new ' + imageName
        cover.save(self.resized_image, image.format)
        # transform img to MNIST form
        # image to ndarray 
        PILimg = PIL.Image.open(self.resized_image)

        self.mnist_image_input = scipy.misc.fromimage(PILimg,
                                                      True)  # True => space gray! ----------------------------------------------------
        self.mnist_image_input = (numpy.multiply(self.mnist_image_input,
                                                 1.0 / 255.0) - 1.0) * -1.0  # inverse the image :D  ( white -> dark )


def main():  # To test this Class.
    imageTest = '2.jpeg'  # The name of the image to resize

    imageTest = Resize_img(imageTest)
    scipy.misc.imshow(imageTest.mnist_image_input)


if __name__ == "__main__":
    main()


# sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk

错误是:

代码语言:javascript
复制
Image --  2.jpeg
Traceback (most recent call last):
  File "Resize_img.py", line 40, in <module>
    main()
  File "Resize_img.py", line 35, in main
    imageTest = Resize_img(imageTest)
  File "Resize_img.py", line 18, in __init__
    with Image.open(f) as image:
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 528, in __getattr__
    raise AttributeError(name)
AttributeError: __exit__

如何解决此问题?

关于在模块PIL.Image中调整方法大小的帮助:

代码语言:javascript
复制
resize(self, size, resample=0) unbound PIL.Image.Image method
    Returns a resized copy of this image.

    :param size: The requested size in pixels, as a 2-tuple:
       (width, height).
    :param filter: An optional resampling filter.  This can be
       one of :py:attr:`PIL.Image.NEAREST` (use nearest neighbour),
       :py:attr:`PIL.Image.BILINEAR` (linear interpolation in a 2x2
       environment), :py:attr:`PIL.Image.BICUBIC` (cubic spline
       interpolation in a 4x4 environment), or
       :py:attr:`PIL.Image.ANTIALIAS` (a high-quality downsampling filter).
       If omitted, or if the image has mode "1" or "P", it is
       set :py:attr:`PIL.Image.NEAREST`.
    :returns: An :py:class:`~PIL.Image.Image` object.
EN

回答 4

Stack Overflow用户

发布于 2018-03-29 07:37:50

正如其他人所提到的,这很可能是由于系统上没有安装LANCZOS而导致的一些缺失的依赖项。您可以尝试使用BILINEAR、BICUBIC、NEAREST或ANTIALIAS。要解决这个问题,我们需要深入研究大小图像包。假设包位于:/usr/local/lib/python3.4/dist-packages/resizeimage/

我们可以使用以下命令编辑大小图像文件:

sudo nano /usr/local/lib/python3.4/dist-packages/resizeimage/resizeimage.py

进入文件后,我们需要用ANTIALIAS替换LANCZOS。例如,在resize_cover函数中:

img = img.resize((new_size[0], new_size[1]), Image.LANCZOS)

变成:

img = img.resize((new_size[0], new_size[1]), Image.ANTIALIAS)

对于文件中的其余函数,依此类推。这应该可以解决您的问题。

票数 1
EN

Stack Overflow用户

发布于 2016-12-11 01:49:47

这可能取决于您的PIL版本。在python shell中尝试这样做。

代码语言:javascript
复制
>>> import PIL.Image                                                                                                                      
>>> help(PIL.Image.Image.resize)
票数 0
EN

Stack Overflow用户

发布于 2017-04-20 21:40:31

我实际上没有在你的代码中看到LANCZOS的用法,但是修复方法是用Image.ANTIALIAS替换Image.LANCZOS。您安装的Python版本可能与使用LANCZOS的版本不同。当涉及到缩小图像和使它们看起来清晰时,ANTIALIAS应该表现得同样好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41078229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档