5

Tôi có văn bản nói "Tôi đang làm rất tốt". Tôi muốn đặt văn bản này trên một nền tảng đáng yêu mà tôi đã tạo ra. Tôi muốn đặt "I am doing great" trên hình ảnh "image.jpg" có trong hệ thống. Điểm bắt đầu của văn bản phải là X, y tính bằng pixel.thêm văn bản trên hình ảnh trong python bằng imagemagik/PIL

tôi đã cố gắng đoạn sau, nhưng đang gặp lỗi: Snippet:

import PIL 
from PIL import ImageFont 
from PIL import Image 
from PIL import ImageDraw 

font = ImageFont.truetype("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf",40) 
text = "Sample Text" 
tcolor = (255,0,0) 
text_pos = (100,100) 

img = Image.open("certificate.png") 
draw = ImageDraw.Draw(img) 
draw.text(text_pos, text, fill=tcolor, font=font) 
del draw 

img.save("a_test.png") 

Lỗi:

Traceback (most recent call last): 
    File "img_man.py", line 13, in <module> 
    draw.text(text_pos, text, fill=tcolor, font=font) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImageDraw.py", line 256, in text 
    ink, fill = self._getink(fill) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImageDraw.py", line 145, in _getink 
    ink = self.palette.getcolor(ink) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImagePalette.py", line 62, in getcolor 
    self.palette = map(int, self.palette) 
ValueError: invalid literal for int() with base 10: '\xed' 

có vẻ là một lỗi trong PIL: http://grokbase.com/t/python/image-sig/114k20c9re/perhaps-bug-report

Có bất kỳ workaround tôi có thể thử?

Trả lời

1

Nhìn vào phương pháp text của the ImageDraw module (top Google nhấn cho 'text pil'.) Bạn cũng sẽ cần các module ImageFont, cách bố trí các mã ví dụ liên quan:

import ImageFont, ImageDraw 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype("arial.ttf", 15) 
draw.text((10, 10), "hello", font=font) 
+0

điều này đề cập đến cách vẽ, không phải cách viết văn bản. Bạn có muốn vẽ các chữ cái không? Im không cho typograpfy sử dụng pil. – user993563

+3

Tôi sợ tôi không thực sự hiểu được sự khác biệt giữa việc vẽ văn bản lên một hình ảnh và viết văn bản lên một hình ảnh. – badp

+0

cập nhật, vui lòng chỉnh sửa phần chỉnh sửa. – user993563

4

Tôi chạy vào lỗi này cùng , nó có vẻ là một lỗi trong Pil/Pillow với xử lý bảng màu PNG. Giải pháp thay thế là chuyển đổi hình ảnh của bạn sang RBG trước khi vẽ văn bản:

img = img.convert('RGB') 
+0

Cảm ơn! Tôi đã đấu tranh với cùng một vấn đề (hoặc rất giống) và chuyển đổi hình ảnh đã làm các trick. – jlliagre

+0

hoạt động như một sự quyến rũ !! – repzero