Tôi có một ứng dụng tải một hình ảnh và khi người dùng nhấp vào nó, một vùng văn bản xuất hiện cho hình ảnh này [sử dụng
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
3], trong đó người dùng có thể viết một số văn bản trên hình ảnh. Mà nên được thêm vào trên hình ảnh.Sau khi thực hiện một số nghiên cứu về nó, tôi đã hình dung rằng
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
4 [Thư viện hình ảnh Python] có thể giúp tôi làm điều này. Vì vậy, tôi đã thử một vài ví dụ để xem nó hoạt động như thế nào và tôi đã xoay sở để viết văn bản trên một hình ảnh. Nhưng tôi nghĩ rằng có một số khác biệt khi tôi thử nó bằng cách sử dụng var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
5 và trong môi trường web. Ý tôi là văn bản trên Textarea rất lớn trong PX. Làm thế nào tôi có thể đạt được cùng kích thước của văn bản khi sử dụng PIL như một trong Textarea?Các văn bản là đa dòng. Làm thế nào tôi có thể làm cho nó đa dòng trong hình ảnh, sử dụng
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
4?Có cách nào tốt hơn là sử dụng PIL không? Tôi không hoàn toàn chắc chắn, nếu đây là triển khai tốt nhất.
html:
nó là hình ảnh đang được chỉnh sửa
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
JQuery để thêm Textarea. Ngoài ra khu vực văn bản là vị trí: kích thước tuyệt đối và cố định.
Tôi có nên đặt nó bên trong một biểu mẫu để tôi có thể có được tọa độ của textarea trên hình ảnh không? Tôi muốn viết văn bản trên hình ảnh khi người dùng nhấp và lưu nó trên hình ảnh.
Đã hỏi ngày 4 tháng 5 năm 2013 lúc 10:44May 4, 2013 at 10:44
ApostolosapostolosApostolos
7.50516 Huy hiệu vàng76 Huy hiệu bạc142 Huy hiệu Đồng16 gold badges76 silver badges142 bronze badges
5
Tôi nghĩ rằng mô -đun ImageFont có sẵn trong
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
4 sẽ hữu ích trong việc giải quyết vấn đề kích thước phông chữ văn bản. Chỉ cần kiểm tra loại phông chữ và kích thước nào phù hợp với bạn và sử dụng hàm sau để thay đổi giá trị phông chữ.# font = ImageFont.truetype[, ]
# font-file should be present in provided path.
font = ImageFont.truetype["sans-serif.ttf", 16]
Vì vậy, mã của bạn sẽ trông giống như:
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
img = Image.open["sample_in.jpg"]
draw = ImageDraw.Draw[img]
# font = ImageFont.truetype[, ]
font = ImageFont.truetype["sans-serif.ttf", 16]
# draw.text[[x, y],"Sample Text",[r,g,b]]
draw.text[[0, 0],"Sample Text",[255,255,255],font=font]
img.save['sample-out.jpg']
Bạn có thể cần phải nỗ lực thêm một số nỗ lực để tính toán kích thước phông chữ. Trong trường hợp bạn muốn thay đổi nó dựa trên số lượng người dùng văn bản đã cung cấp trong
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
8.Để thêm gói văn bản [điều đa dòng] chỉ cần lấy ý tưởng sơ bộ về số lượng ký tự có thể đi theo một dòng, thì có lẽ bạn có thể viết một chức năng xử lý trước cho văn bản của bạn, về cơ bản tìm thấy ký tự sẽ là lần cuối cùng trong mỗi dòng và Chuyển đổi không gian trắng trước nhân vật này thành dòng mới.
Alxwrd
2.21017 Huy hiệu bạc28 Huy hiệu đồng17 silver badges28 bronze badges
Đã trả lời ngày 4 tháng 5 năm 2013 lúc 17:49May 4, 2013 at 17:49
9
Thậm chí ví dụ tối thiểu hơn [vẽ "Hello World!" In Black và với phông chữ mặc định ở phía trên bên trái của hình ảnh]:
...
from PIL import ImageDraw
...
ImageDraw.Draw[
image # Image
].text[
[0, 0], # Coordinates
'Hello world!', # Text
[0, 0, 0] # Color
]
Đã trả lời ngày 29 tháng 7 năm 2018 lúc 4:07Jul 29, 2018 at 4:07
Solomon Uckosolomon UckoSolomon Ucko
4.4132 Huy hiệu vàng22 Huy hiệu bạc42 Huy hiệu đồng2 gold badges22 silver badges42 bronze badges
4
Bạn có thể tạo một thư mục "phông chữ" trong một gốc của dự án của bạn và đặt tệp phông chữ của bạn [sans_serif.ttf] ở đó. Sau đó, bạn có thể làm một cái gì đó như thế này:
fonts_path = os.path.join[os.path.dirname[os.path.dirname[__file__]], 'fonts']
font = ImageFont.truetype[os.path.join[fonts_path, 'sans_serif.ttf'], 24]
Đã trả lời ngày 20 tháng 7 năm 2014 lúc 4:23Jul 20, 2014 at 4:23
SVPPSVPPsvpp
Phim huy hiệu bạc 18111 silver badge3 bronze badges
Đầu tiên, bạn phải tải xuống một loại phông chữ ... ví dụ: //www.wfonts.com/font/microsoft-sans-serif.
Sau đó, sử dụng mã này để vẽ văn bản:
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
img = Image.open["filename.jpg"]
draw = ImageDraw.Draw[img]
font = ImageFont.truetype[r'filepath\..\sans-serif.ttf', 16]
draw.text[[0, 0],"Draw This Text",[0,0,0],font=font] # this will draw text with Blackcolor and 16 size
img.save['sample-out.jpg']
Đã trả lời ngày 19 tháng 2 năm 2019 lúc 5:12Feb 19, 2019 at 5:12
Kumar Skumar sKumar S
3894 Huy hiệu bạc9 Huy hiệu Đồng4 silver badges9 bronze badges
Cài đặt gối đầu tiên
pip install pillow
Thí dụ
from PIL import Image, ImageDraw, ImageFont
image = Image.open['Focal.png']
width, height = image.size
draw = ImageDraw.Draw[image]
text = '//devnote.in'
textwidth, textheight = draw.textsize[text]
margin = 10
x = width - textwidth - margin
y = height - textheight - margin
draw.text[[x, y], text]
image.save['devnote.png']
# optional parameters like optimize and quality
image.save['optimized.png', optimize=True, quality=50]
Đã trả lời ngày 4 tháng 12 năm 2020 lúc 7:11Dec 4, 2020 at 7:11
Fefar Ravifefar RaviFefar Ravi
6887 Huy hiệu bạc17 Huy hiệu đồng7 silver badges17 bronze badges
Một điều không được đề cập trong các câu trả lời khác là kiểm tra kích thước văn bản. Nó thường là cần thiết để đảm bảo văn bản phù hợp với hình ảnh [ví dụ: rút ngắn văn bản nếu quá khổ] hoặc để xác định vị trí để vẽ văn bản [ví dụ: trung tâm văn bản được căn chỉnh]. Gối/PIL cung cấp hai phương pháp để kiểm tra kích thước văn bản, một thông qua ImageFont và một phương pháp thông qua ImageDraw. Như được hiển thị bên dưới, phông chữ không xử lý nhiều thứ được lót, trong khi FenseDraw có.
In [28]: im = Image.new[mode='RGB',size=[240,240]]
In [29]: font = ImageFont.truetype['arial']
In [30]: draw = ImageDraw.Draw[im]
In [31]: t1 = 'hello world!'
In [32]: t2 = 'hello \nworld!'
In [33]: font.getsize[t1], font.getsize[t2] # the height is the same
Out[33]: [[52, 10], [60, 10]]
In [35]: draw.textsize[t1, font], draw.textsize[t2, font] # handles multi-lined text
Out[35]: [[52, 10], [27, 24]]
Đã trả lời ngày 15 tháng 8 năm 2019 lúc 19:22Aug 15, 2019 at 19:22
Langelangelange
5405 Huy hiệu bạc9 Huy hiệu Đồng5 silver badges9 bronze badges
1
Với gối, bạn cũng có thể vẽ trên một hình ảnh bằng mô -đun hình ảnh. Bạn có thể vẽ các đường, điểm, hình elip, hình chữ nhật, vòng cung, bitmap, hợp âm, bánh pieslices, đa giác, hình dạng và văn bản.
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
0Chúng tôi tạo một đối tượng hình ảnh với phương thức mới []. Điều này trả về một đối tượng hình ảnh không có hình ảnh được tải. Sau đó chúng tôi thêm một hình chữ nhật và một số văn bản vào hình ảnh trước khi lưu nó.
Đã trả lời ngày 21 tháng 2 năm 2019 lúc 5:01Feb 21, 2019 at 5:01
Gần đây tôi đã phải thực hiện điều tương tự. Tôi đã tạo một gói trên pypi có thể có ích: pynter
Bạn có thể thêm văn bản vào hình ảnh với các bước này:
Tải xuống hình ảnh:
9var count = 0; $['textarea'].autogrow[]; $['img'].click[function[]{ count = count + 1; if [count > 1]{ $[this].after['']; $['textarea'].focus[]; } }];
Tải xuống phông chữ:
0# font = ImageFont.truetype[, ] # font-file should be present in provided path. font = ImageFont.truetype["sans-serif.ttf", 16]
1# font = ImageFont.truetype[, ] # font-file should be present in provided path. font = ImageFont.truetype["sans-serif.ttf", 16]
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
1Đây sẽ là kết quả:
Đã trả lời ngày 22 tháng 5 năm 2021 lúc 11:36May 22, 2021 at 11:36
Bạn có thể làm với Python bằng mô -đun gối hoặc PIL. Tìm hiểu làm thế nào
Đã trả lời ngày 4 tháng 11 lúc 16:58Nov 4 at 16:58
2
Để thêm văn bản vào tệp hình ảnh, chỉ cần sao chép/dán mã bên dưới
var count = 0;
$['textarea'].autogrow[];
$['img'].click[function[]{
count = count + 1;
if [count > 1]{
$[this].after[''];
$['textarea'].focus[];
}
}];
2
Arienrhod
2.3711 huy hiệu vàng9 Huy hiệu bạc17 Huy hiệu đồng1 gold badge9 silver badges17 bronze badges
Đã trả lời ngày 4 tháng 9 năm 2019 lúc 9:54Sep 4, 2019 at 9:54