Tenho um aplicativo que carrega uma imagem e quando o usuário clica nela, aparece uma área de texto para essa imagem (usando jquery
), onde o usuário pode escrever algum texto na imagem. Que deve ser adicionado na imagem.
Depois de fazer algumas pesquisas sobre isso, descobri que PIL
(Python Imaging Library) pode me ajudar a fazer isso. Tentei alguns exemplos para ver como funciona e consegui escrever um texto em uma imagem. Mas acho que há alguma diferença quando tento usar Python Shell
e em ambiente web. Quero dizer, o texto na textarea é muito grande em px. Como posso obter o mesmo tamanho de texto ao usar PIL como aquele na área de texto?
O texto é multilinha. Como posso torná-lo multilinha na imagem também, usando PIL
?
Existe uma maneira melhor do que usar PIL? Não tenho certeza se esta é a melhor implementação.
html:
<img src="images/test.jpg"/>
é a imagem sendo editada
var count = 0;
$('textarea').autogrow();
$('img').click(function(){
count = count + 1;
if (count > 1){
$(this).after('<textarea />');
$('textarea').focus();
}
});
o jquery para adicionar a textarea. Além disso, a área de texto é a posição: tamanho absoluto e fixo.
Devo colocá-lo dentro de um formulário para obter as coordenadas da textarea na imagem? Quero escrever um texto na imagem quando o usuário clicar e salvá-lo na imagem.
fonte
Respostas:
Acho que o módulo ImageFont disponível em
PIL
deve ser útil para resolver o problema do tamanho da fonte do texto. Apenas verifique qual tipo e tamanho de fonte é apropriado para você e use a seguinte função para alterar os valores da fonte.Portanto, seu código será semelhante a:
Você pode precisar fazer um esforço extra para calcular o tamanho da fonte. Caso você queira alterá-lo com base na quantidade de texto que o usuário forneceu
TextArea
.Para adicionar quebra automática de texto (coisa de multilinha), basta ter uma ideia aproximada de quantos caracteres podem vir em uma linha, então você provavelmente pode escrever uma função de pré-processamento para o seu texto, que basicamente encontra o caractere que será o último em cada linha e converte o espaço em branco antes desse caractere em nova linha.
fonte
self.font = core.getfont(file, size, index, encoding) IOError: cannot open resource
. Como posso fornecer o caminho para o arquivo de fonte?Você pode criar um diretório "fonts" em uma raiz de seu projeto e colocar seu arquivo de fontes (sans_serif.ttf) lá. Então você pode fazer algo assim:
fonte
Um exemplo ainda mais mínimo (desenha "Hello world!" Em preto e com a fonte padrão no canto superior esquerdo da imagem):
fonte
Primeiro, você deve baixar um tipo de fonte ... por exemplo: https://www.wfonts.com/font/microsoft-sans-serif .
Depois disso, use este código para desenhar o texto:
fonte
Com o Pillow, você também pode desenhar em uma imagem usando o módulo ImageDraw. Você pode desenhar linhas, pontos, elipses, retângulos, arcos, bitmaps, acordes, pieslices, polígonos, formas e texto.
criamos um objeto Image com o método new (). Isso retorna um objeto Image sem imagem carregada. Em seguida, adicionamos um retângulo e algum texto à imagem antes de salvá-la.
fonte
Uma coisa não mencionada em outras respostas é verificar o tamanho do texto. Freqüentemente, é necessário certificar-se de que o texto se ajusta à imagem (por exemplo, encurtar o texto se for muito grande) ou para determinar o local para desenhar o texto (por exemplo, texto alinhado no centro). Pillow / PIL oferece dois métodos para verificar o tamanho do texto, um via ImageFont e outro via ImageDraw. Conforme mostrado abaixo, a fonte não lida com linhas múltiplas, enquanto ImageDraw sim.
fonte
Para adicionar texto em um arquivo de imagem, basta copiar / colar o código abaixo
fonte