Python 3.x Discord等应用程序如何将剪贴板位图转换为PNG?

Python 3.x Discord等应用程序如何将剪贴板位图转换为PNG?,python-3.x,image,discord,image-resizing,Python 3.x,Image,Discord,Image Resizing,我目前正在做一个小项目,将8MB以上的图像(不协调文件上传限制)调整到8MB以下,这样我就不必手动调整。我注意到Discord似乎将所有剪贴板位图转换为PNG,因此我也将当前位图转换为PNG,并保存图片以获得文件大小。我尝试了多种不同的重采样算法,但选择了“最近的”,因为它给了我最大的尺寸,所以我可以在最坏的情况下调整大小 如果图像太大,请按当前文件大小与8MB的比率调整其大小。这将成功地将磁盘和内存中的图片更改为8MB以下。奇怪的是,我可以手动点击并拖动图像到Discord中,然后上传,但如果

我目前正在做一个小项目,将8MB以上的图像(不协调文件上传限制)调整到8MB以下,这样我就不必手动调整。我注意到Discord似乎将所有剪贴板位图转换为PNG,因此我也将当前位图转换为PNG,并保存图片以获得文件大小。我尝试了多种不同的重采样算法,但选择了“最近的”,因为它给了我最大的尺寸,所以我可以在最坏的情况下调整大小

如果图像太大,请按当前文件大小与8MB的比率调整其大小。这将成功地将磁盘和内存中的图片更改为8MB以下。奇怪的是,我可以手动点击并拖动图像到Discord中,然后上传,但如果我将图像发送回剪贴板并粘贴,通常会告诉我图像仍然太大。我也看到了太大而不能引起不和谐的图像,但我的程序会检测到它们小于8MB

这是我的Python3代码,用于检查图像大小(使用PIL):

然后再次将图像作为BMP发送到剪贴板(使用win32clipboard):

def get_size_saved(img):
    img.save(temp_file)
    if os.path.isfile(temp_file):
        return round(os.stat(temp_file).st_size / MB, 2)

img = ImageGrab.grabclipboard()
res = img.resize(img.size, resample=Image.NEAREST)
size = get_size_saved(res)
def send_image_to_clipboard(img):
    with BytesIO() as output:
        img.convert("RGB").save(output, "BMP")
        data = output.getvalue()[14:]

    win32.OpenClipboard()
    win32.EmptyClipboard()
    win32.SetClipboardData(win32.CF_DIB, data)
    win32.CloseClipboard()