Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中保存已调整大小的图像?_Python_Python Imaging Library - Fatal编程技术网

如何在Python中保存已调整大小的图像?

如何在Python中保存已调整大小的图像?,python,python-imaging-library,Python,Python Imaging Library,也许这是因为我是Python新手。但我似乎无法调整大小和保存图像 有人能告诉我我做错了什么吗?我首先调整大小,然后将图像裁剪为256x256。输出保存为原始图像。函数调用类似:resizeAndCrop(“path/to/image.png”) 当前行为是以原始大小保存图像的脚本 # function for resizing and cropping to 256x256 def resizeAndCrop(imgPath): im = Image.open(imgPath)

也许这是因为我是Python新手。但我似乎无法调整大小和保存图像

有人能告诉我我做错了什么吗?我首先调整大小,然后将图像裁剪为256x256。输出保存为原始图像。函数调用类似:
resizeAndCrop(“path/to/image.png”)

当前行为是以原始大小保存图像的脚本

# function for resizing and cropping to 256x256
def resizeAndCrop(imgPath):

    im = Image.open(imgPath)

    # remove original
    os.remove(imgPath)

    # Get size
    x, y = im.size

    # New sizes
    yNew = 256
    xNew = yNew # should be equal

    # First, set right size
    if x > y:
        # Y is smallest, figure out relation to 256
        xNew = round(x * 256 / y)
    else:
        yNew = round(y * 256 / x)

    # resize
    im.resize((int(xNew), int(yNew)), PIL.Image.ANTIALIAS)

    # crop
    im.crop(((int(xNew) - 256)/2, (int(yNew) - 256)/2, (int(xNew) + 256)/2, (int(yNew) + 256)/2))

    # save
    print("SAVE", imgPath)
    im.save(imgPath)

根据文件:

对图像调用resize“返回此图像的已调整大小的副本”。因此,您需要将结果分配给一个新变量:

resizedImage = im.resize((int(xNew), int(yNew)), PIL.Image.ANTIALIAS)

对于裁剪,同样适用,但文档中指出“在Pillow 3.4.0之前,这是一个懒惰的操作”。因此,现在您需要将对裁剪的调用分配给另一个变量,以及

resize()
返回图像的大小调整副本,因此您需要分配操作结果,否则新图像将丢失。
crop()
的情况也是如此,添加了一个褶皱:“这是一个懒惰的操作。对源图像的更改可能反映在裁剪后的图像中,也可能不反映在裁剪后的图像中。要获得单独的副本,请对裁剪后的副本调用
load
方法。”因此,您正在对图像执行裁剪和调整大小,但是什么都没有发生,与原始图像相同的图像正在保存?如:
newImage=im.resize((int(xNew),….
?@4thicemancorrect@StevenRumbalski他是第一个,我服从他