【问题标题】:How can I write text over an image, and overlay another image on it, in Python?如何在 Python 中在图像上写入文本并在其上覆盖另一个图像?
【发布时间】:2011-11-16 16:10:42
【问题描述】:

我需要在 Python 中的 PNG 图像上放置一些文本,我还需要在第一个图像上放置另一个图像。

所以我将有一个基本图像(创建的每个图像都相同),一个放在左上角的徽标,以及整个图像的文本(非特定字体,我只需要设置字体大小)。

我可以使用 PIL 或其他库吗?

我也搜索过 StackOverflow 和 Google,但找不到有关如何执行此操作的提示。

谢谢。

【问题讨论】:

    标签: python png python-imaging-library


    【解决方案1】:

    PIL 可以做到:

    from PIL import Image, ImageFont, ImageDraw
    font = ImageFont.truetype("/usr/share/fonts/dejavu/DejaVuSans.ttf", 25)
    img = Image.new("RGBA", (200,200), (120,20,20))
    draw = ImageDraw.Draw(img)
    draw.text((0,0), "This is a test", (255,255,0), font=font)
    img.save("a_test.png")
    

    唯一可能发生的错误是找不到字体。 在这种情况下,您必须更改代码行:

    font = ImageFont.truetype("/usr/share/fonts/dejavu/DejaVuSans.ttf",25)
    

    来源:http://python-catalin.blogspot.com/2010/06/add-text-on-image-with-pil-module.html

    【讨论】:

    • 在你的代码中,有两行关于draw = ImageDraw.Draw(img),我认为,第二行是没有必要的。
    【解决方案2】:

    我觉得opencv比较好用:

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    image = cv2.imread('xxx.png')  
    texted_image =cv2.putText(img=np.copy(image), text="hello", org=(200,200),fontFace=3, fontScale=3, color=(0,0,255), thickness=5)
    plt.imshow(texted_image)
    plt.show()
    

    注意原图可能会被更改,所以我添加np.copy来保护它。 更多功能详情http://docs.opencv.org/2.4.8/modules/core/doc/drawing_functions.html?highlight=puttext#cv2.putText

    fontFace可以参考https://codeyarns.com/2015/03/11/fonts-in-opencv/

    【讨论】:

    • 有什么方法可以获取绘制出来的文字的像素大小?
    【解决方案3】:

    PIL 是一种方法。您还可以查看ImageMagick,它还支持compositing images 并支持text into images(以及许多其他内容)。

    有一个通过PythonMagick 连接ImageMagick 的python 接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2019-12-05
      相关资源
      最近更新 更多