在不下载 Python 中的文件的情况下检查存储在 FTP 服务器上的图像的纵横比

Check aspect ratio of image stored on an FTP server without downloading the file in Python

我在 FTP 上有图片,我想在从 FTP 服务器下载图片之前检查图片的纵横比。使用 Python ftplib,是否可以在不下载文件的情况下检查 FTP 上的图像尺寸(即宽度和高度)?

图像尺寸是文件内容的一部分。因此,您至少需要 下载 包含该信息的文件部分。这将与图像文件格式不同。但通常它会在文件的最开头。

如何使用 ftplib 实现:只要开始下载并在收到足够的数据后中止它。在 FTP 中没有更聪明的方法来实现这一点。有关示例,请参阅

我会尝试阅读 8KB 之类的内容,应该绰绰有余。然后您可以使用这样的代码从部分文件中检索大小:Get Image size WITHOUT loading image into memory

from PIL import Image
from ftplib import FTP
from io import BytesIO

ftp = FTP()
ftp.connect(host, user, passwd)
 
cmd = "RETR {}".format(filename)
f = BytesIO()
size = 8192
aborted = False

def gotdata(data):
    f.write(data)
    while (not aborted) and (f.tell() >= size):
        ftp.abort()
        aborted = True

try:
    ftp.retrbinary(cmd, gotdata)
except:
    # An exception when transfer is aborted is expected
    if not aborted:
        raise

f.seek(0)
im = Image.open(f)

print(im.size)

相关问题:Reading image EXIF data from SFTP server without downloading the file