J'ai une application qui charge une image et lorsque l'utilisateur clique dessus, une zone de texte apparaît pour cette image (en utilisant jquery
), où l'utilisateur peut écrire du texte sur l'image. Qui devrait être ajouté sur l'image.
Après avoir fait quelques recherches à ce sujet, j'ai pensé que PIL
(Python Imaging Library) pouvait m'aider à le faire. J'ai donc essayé quelques exemples pour voir comment cela fonctionne et j'ai réussi à écrire du texte sur une image. Mais je pense qu'il y a une certaine différence lorsque je l'essaie en utilisant Python Shell
et dans un environnement Web. Je veux dire que le texte sur la zone de texte est très gros en px. Comment puis-je obtenir la même taille de texte en utilisant PIL que celui de la zone de texte?
Le texte est Multiline. Comment puis-je le rendre multiligne dans l'image également, en utilisant PIL
?
Y a-t-il un meilleur moyen que d'utiliser PIL? Je ne suis pas entièrement sûr, si c'est la meilleure mise en œuvre.
html:
<img src="images/test.jpg"/>
c'est l'image en cours d'édition
var count = 0;
$('textarea').autogrow();
$('img').click(function(){
count = count + 1;
if (count > 1){
$(this).after('<textarea />');
$('textarea').focus();
}
});
la jquery pour ajouter le textarea. La zone de texte est également position: taille absolue et fixe.
Dois-je le placer dans un formulaire pour pouvoir obtenir les coordonnées de textarea sur l'image? Je veux écrire du texte sur l'image lorsque l'utilisateur clique et l'enregistrer sur l'image.
la source
Réponses:
Je pense que le module ImageFont disponible dans
PIL
devrait être utile pour résoudre le problème de taille de police du texte. Vérifiez simplement le type et la taille de police qui vous conviennent et utilisez la fonction suivante pour modifier les valeurs de police.Donc, votre code ressemblera à quelque chose de similaire à:
Vous devrez peut-être faire un effort supplémentaire pour calculer la taille de la police. Si vous souhaitez le modifier en fonction de la quantité de texte que l'utilisateur a fournie dans
TextArea
.Pour ajouter un habillage de texte (chose multiligne), prenez simplement une idée approximative du nombre de caractères pouvant figurer sur une ligne, alors vous pouvez probablement écrire une fonction de pré-traitement pour votre texte, qui trouve essentiellement le caractère qui sera le dernier dans chaque ligne et convertit l'espace blanc avant ce caractère en nouvelle ligne.
la source
self.font = core.getfont(file, size, index, encoding) IOError: cannot open resource
. Comment puis-je fournir le chemin d'accès au fichier de police?Vous pouvez créer un répertoire "fonts" dans une racine de votre projet et y placer votre fichier de polices (sans_serif.ttf). Ensuite, vous pouvez créer quelque chose comme ceci:
la source
Exemple encore plus minimal (dessine "Hello world!" En noir et avec la police par défaut en haut à gauche de l'image):
la source
Tout d'abord, vous devez télécharger un type de police ... par exemple: https://www.wfonts.com/font/microsoft-sans-serif .
Après cela, utilisez ce code pour dessiner le texte:
la source
Avec Pillow, vous pouvez également dessiner sur une image à l'aide du module ImageDraw. Vous pouvez dessiner des lignes, des points, des ellipses, des rectangles, des arcs, des bitmaps, des accords, des pieslices, des polygones, des formes et du texte.
nous créons un objet Image avec la méthode new (). Cela renvoie un objet Image sans image chargée. Nous ajoutons ensuite un rectangle et du texte à l'image avant de l'enregistrer.
la source
Une chose qui n'est pas mentionnée dans d'autres réponses est la vérification de la taille du texte. Il est souvent nécessaire de s'assurer que le texte correspond à l'image (par exemple, raccourcir le texte s'il est surdimensionné) ou de déterminer l'emplacement pour dessiner le texte (par exemple, texte aligné en haut au centre). Pillow / PIL propose deux méthodes pour vérifier la taille du texte, une via ImageFont et une via ImageDraw. Comme indiqué ci-dessous, la police ne gère pas plusieurs lignes, contrairement à ImageDraw.
la source
Pour ajouter du texte sur un fichier image, copiez / collez simplement le code ci-dessous
la source