Я пытаюсь применить X к определенным шрифтам в моем скрипте flask, хотя я могу применить «X» (который является водяным знаком). Я не могу объединить его в том же слое, что и глиф, чтобы его можно было открыть. в любом редакторе и удалил. Как я могу добиться этого программно, возможно ли это вообще с помощью Python и Fonttools?
Вот мой скрипт
from flask import Flask, request, render_template, send_from_directory
import os
from fontTools.ttLib import TTFont, TTLibError
from fontTools.pens.ttGlyphPen import TTGlyphPen
from werkzeug.utils import secure_filename
import logging
from matplotlib.path import Path
from fontTools.pens.basePen import BasePen
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'
logging.basicConfig(level=logging.DEBUG)
class GlyphPlotter(BasePen):
"""Custom pen for converting glyph outlines to matplotlib paths."""
def __init__(self, glyphSet, linewidth=1):
super().__init__(glyphSet)
self.path = []
self.x_points = []
self.y_points = []
def _moveTo(self, p):
self.path.append((Path.MOVETO, p))
self.x_points.append(p[0])
self.y_points.append(p[1])
def _lineTo(self, p):
self.path.append((Path.LINETO, p))
self.x_points.append(p[0])
self.y_points.append(p[1])
def _curveToOne(self, p1, p2, p3):
self.path.append((Path.CURVE4, p1))
self.path.append((Path.CURVE4, p2))
self.path.append((Path.CURVE4, p3))
self.x_points.extend([p1[0], p2[0], p3[0]])
self.y_points.extend([p1[1], p2[1], p3[1]])
def _closePath(self):
self.path.append((Path.CLOSEPOLY, self.path[0][1]))
def add_cross_overlay(glyph, glyph_set, stroke_width):
"""Adds a 'X' sign overlay at the center of the glyph's bounding box with thick lines."""
plotter = GlyphPlotter(glyph_set)
glyph.draw(plotter)
if plotter.x_points and plotter.y_points:
xMin, xMax = min(plotter.x_points), max(plotter.x_points)
yMin, yMax = min(plotter.y_points), max(plotter.y_points)
else:
xMin, yMin, xMax, yMax = 0, 0, 1000, 1000 # Default bounding box
centerX = (xMin + xMax) / 2
centerY = (yMin + yMax) / 2
logging.debug(f"Drawing X on glyph with bounding box ({xMin}, {yMin}, {xMax}, {yMax})")
pen = TTGlyphPen(glyph_set)
glyph.draw(pen)
# Draw a thick X by creating a parallelogram path
pen.moveTo((xMin, yMax))
pen.lineTo((xMax, yMax - stroke_width))
pen.lineTo((xMax - stroke_width, yMin))
pen.lineTo((xMin + stroke_width, yMin))
pen.closePath()
pen.moveTo((xMax, yMax))
pen.lineTo((xMin, yMax - stroke_width))
pen.lineTo((xMin + stroke_width, yMin))
pen.lineTo((xMax - stroke_width, yMin))
pen.closePath()
new_glyph = pen.glyph()
return new_glyph
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return 'No file part'
file = request.files['file']
if file.filename == '':
return 'No selected file'
if file:
filename = secure_filename(file.filename)
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)
try:
watermark_font(filepath)
except TTLibError as e:
logging.error(f"Error processing font: {e}")
return f"Error processing font: {e}"
return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)
def watermark_font(filepath):
font = TTFont(filepath)
glyph_set = font.getGlyphSet()
for char in ['T', 'h', 'e']:
glyph_name = font.getBestCmap().get(ord(char))
if glyph_name:
glyph = glyph_set[glyph_name]
# Apply a watermark
new_glyph = add_cross_overlay(glyph, glyph_set, stroke_width=30)
# Replace the glyph in the font
font['glyf'][glyph_name] = new_glyph
font.save(filepath)
if __name__ == '__main__':
app.run(debug=True)
Я попытался объединить исходный глиф и водяной знак в один слой, объединив их контуры в один набор контуров в файле шрифта. При этом глиф и водяной знак просто полностью удаляются
п>
Я пытаюсь применить X к определенным шрифтам в моем скрипте flask, хотя я могу применить «X» (который является водяным знаком). Я не могу объединить его в том же слое, что и глиф, чтобы его можно было открыть. в любом редакторе и удалил. Как я могу добиться этого программно, возможно ли это вообще с помощью Python и Fonttools? Вот мой скрипт [code] from flask import Flask, request, render_template, send_from_directory import os from fontTools.ttLib import TTFont, TTLibError from fontTools.pens.ttGlyphPen import TTGlyphPen from werkzeug.utils import secure_filename import logging from matplotlib.path import Path from fontTools.pens.basePen import BasePen
def add_cross_overlay(glyph, glyph_set, stroke_width): """Adds a 'X' sign overlay at the center of the glyph's bounding box with thick lines.""" plotter = GlyphPlotter(glyph_set) glyph.draw(plotter)
@app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return 'No file part' file = request.files['file'] if file.filename == '': return 'No selected file' if file: filename = secure_filename(file.filename) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(filepath) try: watermark_font(filepath) except TTLibError as e: logging.error(f"Error processing font: {e}") return f"Error processing font: {e}" return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)
def watermark_font(filepath): font = TTFont(filepath) glyph_set = font.getGlyphSet()
for char in ['T', 'h', 'e']: glyph_name = font.getBestCmap().get(ord(char)) if glyph_name: glyph = glyph_set[glyph_name]
# Apply a watermark new_glyph = add_cross_overlay(glyph, glyph_set, stroke_width=30)
# Replace the glyph in the font font['glyf'][glyph_name] = new_glyph
font.save(filepath)
if __name__ == '__main__': app.run(debug=True)
[/code] Я попытался объединить исходный глиф и водяной знак в один слой, объединив их контуры в один набор контуров в файле шрифта. При этом глиф и водяной знак просто полностью удаляются п>
**может ли кто-нибудь подсказать мне, как загружать видео TikTok без водяных знаков? Я использовал старый метод, но сейчас он не работает. Теперь, когда tiktok изменил метод, поэтому он не работает, я даже нашел способ получить URL-адрес с водяным...
Как скачать видео TikTok без водяных знаков. Я использовал старый метод, но сейчас он не работает. Теперь, когда tiktok изменил метод, поэтому он не работает, я даже нашел способ получить URL-адрес с водяным знаком, но он дает отказ в доступе,...
Как скачать видео TikTok без водяных знаков. Я использовал старый метод, но сейчас он не работает. Теперь, когда tiktok изменил метод, поэтому он не работает, я даже нашел способ получить URL-адрес с водяным знаком, но он дает отказ в доступе,...
Я пытаюсь добавить водяные знаки к изображениям в проекте Expo, используя библиотеку react-native-image-marker. Моя цель — наложить текст и, возможно, изображения на существующие изображения, отображаемые в приложении.
I'm working with Apache Flink for stream processing and I've encountered a scenario that I haven't been able to find a solution for in the documentation or online resources. My scenario involves processing data streams where each element is keyed...