17

Tôi đang cố gắng định tỷ lệ văn bản động được đặt trên các hình ảnh có kích thước khác nhau nhưng đã biết. Văn bản sẽ được áp dụng làm hình mờ. Có cách nào để mở rộng văn bản liên quan đến kích thước hình ảnh không? Tôi không yêu cầu văn bản chiếm toàn bộ diện tích bề mặt, chỉ để hiển thị đủ để dễ nhận biết và khó loại bỏ. Tôi đang sử dụng Python Imaging Library phiên bản 1.1.7. trên Linux.PIL cách quy mô kích thước văn bản có liên quan đến kích thước của hình ảnh

Tôi muốn có thể đặt tỷ lệ cỡ chữ thành kích thước hình ảnh, ví dụ như 1/10 kích thước hoặc thứ gì đó.

Tôi đã xem xét thuộc tính kích thước phông chữ để thay đổi kích thước nhưng tôi không có may mắn khi tạo thuật toán để mở rộng quy mô. Tôi tự hỏi nếu có một cách tốt hơn.

Bất kỳ ý tưởng nào về cách tôi có thể đạt được điều này?

Cảm ơn

Trả lời

37

Bạn chỉ có thể tăng kích thước phông chữ cho đến khi bạn thấy phù hợp. font.getsize() là hàm cho bạn biết văn bản được hiển thị lớn như thế nào.

import ImageFont, ImageDraw, Image 

image = Image.open('hsvwheel.png') 
draw = ImageDraw.Draw(image) 
txt = "Hello World" 
fontsize = 1 # starting font size 

# portion of image width you want text width to be 
img_fraction = 0.50 

font = ImageFont.truetype("arial.ttf", fontsize) 
while font.getsize(txt)[0] < img_fraction*image.size[0]: 
    # iterate until the text size is just larger than the criteria 
    fontsize += 1 
    font = ImageFont.truetype("arial.ttf", fontsize) 

# optionally de-increment to be sure it is less than criteria 
fontsize -= 1 
font = ImageFont.truetype("arial.ttf", fontsize) 

print 'final font size',fontsize 
draw.text((10, 25), txt, font=font) # put the text on the image 
image.save('hsvwheel_txt.png') # save it 

Nếu đây là không đủ hiệu quả cho bạn, bạn có thể thực hiện một chương trình gốc tìm hiểu, nhưng tôi đoán rằng font.getsize() chức năng là khoai tây nhỏ so với phần còn lại của quá trình chỉnh sửa hình ảnh của bạn.

+4

Xin chào Paul, điều đó đã xảy ra. Cảm ơn đã giúp đỡ – Shpongle

5

Nói chung khi bạn thay đổi kích thước phông chữ sẽ không thay đổi kích thước phông chữ tuyến tính.

Non-linear Scaling

Bây giờ này thường phụ thuộc vào phần mềm, phông chữ, vv ... Ví dụ này được lấy từ Typophile và sử dụng LaTex + font chữ hiện đại máy tính. Như bạn có thể thấy nó không chính xác một tỷ lệ tuyến tính. Vì vậy, nếu bạn đang gặp rắc rối với quy mô phông chữ phi tuyến tính thì tôi không chắc chắn làm thế nào để giải quyết nó, nhưng một đề nghị có thể là để.

  1. Render font như chặt chẽ với kích thước mà bạn muốn, sau đó mở rộng quy mô mà lên/xuống qua hình ảnh thông thường thuật toán mở rộng quy mô ...
  2. Chỉ cần chấp nhận rằng nó sẽ không chính xác được mở rộng quy mô tuyến tính và cố gắng tạo một số loại bảng/thuật toán sẽ chọn kích thước điểm gần nhất cho phông chữ để phù hợp với kích thước hình ảnh.
+0

Cảm ơn bạn đã trả lời, Phương pháp được đề xuất bởi Paul đã giải quyết nó. Cảm ơn anyway mặc dù. – Shpongle

+0

Suy nghĩ đầu tiên của tôi nhìn vào hình ảnh là "tốt nếu bạn không mở rộng chiều cao dòng với văn bản, sau đó là _course_ nó sẽ không nhìn thẳng". Nhưng so sánh chiều dài của các dòng, bạn có thể thấy rằng độ dài kết xuất của phông chữ 6pt là hơn một nửa của 12pt, và 5pt là hơn một nửa chiều dài của 10pt. – Ian

Các vấn đề liên quan