Python - 如何将BMP转换为JPEG或PDF?以便文件大小不是50MB而是更小?

10

我有一个扫描仪,当我扫描页面时,它会生成一个BMP文件,但每页的大小为50MB。我该如何告诉Python将其转换为JPEG并缩小尺寸。

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

你应该如何告诉他把它变成JPEG或PDF?(原生传输总是无压缩图像,因此您的图像大小将为:(每英寸点数*高度英寸)*(每英寸点数*宽度英寸)*每像素字节数)

2个回答

13
您可以使用像PIL (http://www.pythonware.com/products/pil/) 或 Pillow (https://github.com/python-pillow/Pillow) 这样的工具,根据文件名指定的格式将文件保存。如果没有指定文件名,则Python TWAIN模块会将从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')

输出:

这里输入图片描述


2
请注意:在编辑部分中,请始终发布代码示例,这将更好地为其他研究和开发中遇到类似问题的用户保留几年时间。谢谢。 - user285594
好的,这个被接受的答案让我有了评论的动力,所以:谢谢,以后会发布代码的! :) - qDot

4

用于批量转换:

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))

那并不会减小文件的大小。它们仍然是50MB。 - RedKnite
1
这实际上会改变图片的格式吗?还是只是更改扩展名? - DonCarleone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接