我有一个加载图像的应用程序,当用户单击它时,将出现此图像的文本区(使用jquery),用户可以在该图像上写入一些文本。它应该添加到Image上。
在对它做了一些研究之后,我认为PIL (Python Imaging )可以帮助我做到这一点。所以我尝试了几个例子来看看它是如何工作的,我设法在图像上写下了文本。但我认为我在Python Shell和在web环境下尝试的时候有一些不同。我的意思是文本区域上的文本在px中非常大。如何在使用PIL时实现与文本区域相同的文本大小?
文本为多行。如何使用PIL使其在图像中也是多行的?
有比使用PIL更好的方法吗?我不能完全确定这是否是最好的实现。
html:
<img src="images/test.jpg"/>它是正在编辑的图像
var count = 0;
$('textarea').autogrow();
$('img').click(function(){
count = count + 1;
if (count > 1){
$(this).after('<textarea />');
$('textarea').focus();
}
});添加文本区域的jquery。文本区域也是位置:绝对大小和固定大小。
我应该把它放在一个表单中,这样我就可以得到图像上的文本区域的坐标了吗?我想在用户点击时在图像上写文本,并保存在图像上。
发布于 2013-05-05 01:49:22
我认为PIL中提供的ImageFont模块应该有助于解决文本字体大小问题。只需检查适合您的字体类型和大小,并使用以下函数更改字体值。
# font = ImageFont.truetype(<font-file>, <font-size>)
# font-file should be present in provided path.
font = ImageFont.truetype("sans-serif.ttf", 16)因此,您的代码将类似于:
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-file>, <font-size>)
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')您可能需要花费一些额外的精力来计算字体大小。以防您想要根据用户在TextArea中提供的文本量进行更改。
要添加文本换行(多行),只需粗略地了解一行中可以包含多少个字符,然后您可能会为您的文本编写一个预处理函数,该函数基本上会找到每行中最后一个字符,并将此字符之前的空格转换为新行。
发布于 2018-07-29 12:07:07
更小的例子(绘制"Hello world!“黑色,图像左上角使用默认字体):
...
from PIL import ImageDraw
...
ImageDraw.Draw(
image # Image
).text(
(0, 0), # Coordinates
'Hello world!', # Text
(0, 0, 0) # Color
)发布于 2014-07-20 12:23:33
您可以在项目的根目录中创建一个" fonts“目录,并将您的fonts (sans_serif.ttf)文件放在那里。然后你可以做这样的东西:
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)https://stackoverflow.com/questions/16373425
复制相似问题