Python - 如何将BMP转为JPEG或PDF?这样文件大小就不是 50MB 而是更小了?

Python - how to make BMP into JPEG or PDF? so that the file size is not 50MB but less?

我有一个扫描仪,当我扫描页面时它生成一个 BMP 文件,但每页的大小是 50MB。我怎么知道Python,让它变成 JPEG 和小尺寸。

rv = ss.XferImageNatively()
if rv:
(handle, count) = rv
twain.DIBToBMFile(handle,'imageName.bmp')

你怎么告诉他做 JPEG 或 PDF? (本机传输始终是未压缩的图像,因此您的图像大小为: (以英寸为单位的宽度 * dpi)*(以英寸为单位的高度 * dpi)* 每像素字节数)

您可以使用 PIL (http://www.pythonware.com/products/pil/) or Pillow (https://github.com/python-pillow/Pillow) 之类的工具,它会根据文件名以您指定的格式保存文件。

如果未指定文件名,python TWAIN 模块将 return 来自 DIBToBMFile 的位图作为字符串,因此您可以将该字符串输入图像库之一以用作缓冲区。否则,您可以只保存到一个文件,然后打开该文件并重新保存它,但这是一种相当迂回的做事方式。

编辑: 参见(惰性模式开启)

from PIL import Image
img = Image.open('C:/Python27/image.bmp')
new_img = img.resize( (256, 256) )
new_img.save( 'C:/Python27/image.png', 'png')

输出:

批量转换:

from PIL import Image
import glob
ext = input('Input the original file extension: ')
new = input('Input the new file extension: ')

# Checks to see if a dot has been input with the images extensions.
# If not, it adds it for us:
if '.' not in ext.strip():
    ext = '.'+ext.strip()
if '.' not in new.strip():
    new = '.'+new.strip()

# Creates a list of all the files with the given extension in the current folder:
files = glob.glob('*'+ext)

# Converts the images:
for f in files:
    im = Image.open(f)
    im.save(f.replace(ext,new))