如何在保存pillow图像时正确设置DPI?

12

我正在尝试使用Pillow库在Python上编程生成图像,但是我在图像内部的文本质量方面遇到了问题。

我想将我生成的图像保存为PNG格式,因此在保存时设置了DPI,根据这个文档的说明,但是不管我使用dpi=(72,72)还是dpi=(600,600)保存,视觉效果都相同。

我的代码如下:

from PIL import Image, ImageDraw, ImageFont

def generate_empty_canvas(width, height, color='white'):
    size = (width, height)
    return Image.new('RGB', size, color=color)

def draw_text(text, canvas):
    font = ImageFont.truetype('Verdana.ttf', 10)
    draw = ImageDraw.Draw(canvas)
    if '\n' not in text:
        draw.text((0, 0), text, font=font, fill='black')
    else:
        draw.multiline_text((0, 0), text, font=font, fill='black')

def create_sample():
    text = 'aaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbb\nccccccccccccccccccccc'
    canvas = generate_empty_canvas(200, 50)
    draw_text(text, canvas)
    canvas.save('low_quality.png', dpi=(72, 72))
    canvas.save('high_quality.png', dpi=(600, 600))

low_quality.png是:

Image dpi=72

high_quality.png是:

Image dpi=600

从图像中可以看出质量没有改变。 我在这里做错了什么?

我应该在哪里设置DPI,以便图像确实具有dpi = 600?


1
为了避免掉入这个陷阱,在尝试使用Pillow设置DPI时,如果可能的话,请使用更新的版本。我曾经在6.0.0版本中遇到保存DPI不正确的问题。我现在使用的是8.2.0版本,它绝对可以正常工作。虽然与您实际的问题无关,但有些人可能会发现这很有用。 - Filipe Nicoli
1个回答

24

DPI值仅作为计算机图像的元数据,它们提供有关如何显示或打印图像的提示。

使用360 dpi打印360×360像素的图像将生成1×1英寸的输出。

简单地说,DPI设置建议图像的缩放级别。

以其他DPI保存不会更改图像内容。如果您想要更大的图像,请创建一个更大的画布并使用更大的字体。


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