Ich habe eine Anwendung, die ein Bild lädt. Wenn der Benutzer darauf klickt, wird für dieses Bild ein Textbereich angezeigt (mit jquery
), in dem der Benutzer Text auf das Bild schreiben kann. Welches sollte auf Bild hinzugefügt werden.
Nachdem ich einige Nachforschungen angestellt hatte, stellte ich fest, dass PIL
(Python Imaging Library) mir dabei helfen kann. Also habe ich einige Beispiele ausprobiert, um zu sehen, wie es funktioniert, und es ist mir gelungen, Text auf ein Bild zu schreiben. Aber ich denke, es gibt einen Unterschied, wenn ich es mit Python Shell
und in einer Webumgebung versuche . Ich meine, der Text auf dem Textbereich ist in px sehr groß. Wie kann ich mit PIL die gleiche Textgröße wie im Textbereich erreichen?
Der Text ist mehrzeilig. Wie kann ich es auch im Bild mehrzeilig machen PIL
?
Gibt es einen besseren Weg als PIL? Ich bin mir nicht ganz sicher, ob dies die beste Implementierung ist.
html:
<img src="images/test.jpg"/>
Es ist das Bild, das bearbeitet wird
var count = 0;
$('textarea').autogrow();
$('img').click(function(){
count = count + 1;
if (count > 1){
$(this).after('<textarea />');
$('textarea').focus();
}
});
die Abfrage zum Hinzufügen des Textbereichs. Auch der Textbereich ist Position: absolute und feste Größe.
Sollte ich es in ein Formular einfügen, damit ich die Koordinaten des Textbereichs auf dem Bild erhalten kann? Ich möchte Text auf ein Bild schreiben, wenn der Benutzer darauf klickt, und es auf dem Bild speichern.
quelle
Antworten:
Ich denke, das in verfügbare ImageFont- Modul
PIL
sollte bei der Lösung des Problems der Textschriftgröße hilfreich sein. Überprüfen Sie einfach, welcher Schrifttyp und welche Schriftgröße für Sie geeignet sind, und verwenden Sie die folgende Funktion, um die Schriftwerte zu ändern.Ihr Code sieht also ungefähr so aus:
Möglicherweise müssen Sie zusätzliche Anstrengungen unternehmen, um die Schriftgröße zu berechnen. Falls Sie es basierend auf der Menge an Text ändern möchten, die der Benutzer eingegeben hat
TextArea
.Um Textumbruch (mehrzeiliges Ding) hinzuzufügen, nehmen Sie einfach eine ungefähre Vorstellung davon, wie viele Zeichen in einer Zeile kommen können. Dann können Sie wahrscheinlich eine Vorverarbeitungsfunktion für Ihren Text schreiben, die im Grunde das Zeichen findet, das in jeder Zeile und in der Zeile das letzte ist konvertiert Leerzeichen vor diesem Zeichen in eine neue Zeile.
quelle
self.font = core.getfont(file, size, index, encoding) IOError: cannot open resource
. Wie kann ich einen Pfad zur Schriftartdatei angeben?Sie können ein Verzeichnis "fonts" in einem Stammverzeichnis Ihres Projekts erstellen und dort Ihre fonts-Datei (sans_serif.ttf) ablegen. Dann können Sie so etwas machen:
quelle
Noch minimaleres Beispiel (zeichnet "Hallo Welt!" In Schwarz und mit der Standardschriftart oben links im Bild):
quelle
Zuerst müssen Sie einen Schrifttyp herunterladen ... zum Beispiel: https://www.wfonts.com/font/microsoft-sans-serif .
Verwenden Sie danach diesen Code, um den Text zu zeichnen:
quelle
Mit Pillow können Sie auch mit dem ImageDraw-Modul auf ein Bild zeichnen. Sie können Linien, Punkte, Ellipsen, Rechtecke, Bögen, Bitmaps, Akkorde, Pieslices, Polygone, Formen und Text zeichnen.
Wir erstellen ein Image-Objekt mit der new () -Methode. Dies gibt ein Bildobjekt ohne geladenes Bild zurück. Anschließend fügen wir dem Bild ein Rechteck und Text hinzu, bevor wir es speichern.
quelle
Eine Sache, die in anderen Antworten nicht erwähnt wird, ist die Überprüfung der Textgröße. Es wird häufig benötigt, um sicherzustellen, dass der Text zum Bild passt (z. B. den Text kürzen, wenn er übergroß ist) oder um die Position zum Zeichnen des Textes zu bestimmen (z. B. ausgerichteter Text oben in der Mitte). Pillow / PIL bietet zwei Methoden zum Überprüfen der Textgröße: eine über ImageFont und eine über ImageDraw. Wie unten gezeigt, verarbeitet die Schriftart nicht mehrere Zeilen, während ImageDraw dies tut.
quelle
Um einer Bilddatei Text hinzuzufügen, kopieren Sie einfach den folgenden Code und fügen Sie ihn ein
quelle