Я пытаюсь обслуживать HTML-страницу с атрибутами SVG; поэтому, как только я нажму «Создать», я хочу, чтобы загрузить этот файл как .jpg вместо SVG. Я просмотрел несколько конвертеров, которые работают с командной строкой, например, так.Загрузить SVG как JPEG с использованием фляжки
os.system("rsvg-convert -h 32 save.svg > icon-32.jpg")
Similiary, я хочу, чтобы иметь возможность нажимать на создание и загрузку .jpg версии моего файла. В настоящее время я пытаюсь сделать это с помощью Flask.
without_filter = <svg viewBox="0 0 400 150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="background: #40484b;">
<defs>
<!-- if you use the same shape multiple times, you put the reference here and reference it with <use> -->
<rect id="path-1" x="25" y="25" width="100" height="100"></rect>
<rect id="path-3" x="150" y="25" width="100" height="100"></rect>
<rect id="path-5" x="275" y="25" width="100" height="100"></rect>
<!-- gradient -->
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="gradient">
<stop stop-color="#FF8D77" offset="0%"></stop>
<stop stop-color="#FFBDB1" offset="50%"></stop>
<stop stop-color="#F4E3F6" offset="100%"></stop>
</linearGradient>
<!-- clip-path -->
<clipPath id="clip">
<circle cx="325" cy="75" r="50"></circle>
</clipPath>
<!-- filter -->
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="glow">
<feGaussianBlur stdDeviation="15" in="SourceGraphic">
<animate attributeName="stdDeviation" attributeType="XML"
begin="0s" dur="0.25s" repeatCount="indefinite"
values="15;20;15"/>
</feGaussianBlur>
</filter>
</defs>
<g fill-rule="evenodd">
<use xlink:href="#path-1" filter="url(#glow)" fill="#FF8D77" fill-opacity="0.5"></use>
<use xlink:href="#path-3" fill="url(#gradient)"></use>
<use xlink:href="#path-5" fill="#FF8D77" clip-path="url(#clip)"></use>
</g>
</svg>
Так что я пытаюсь загрузить (HTML), как .jpeg, как только пользователь нажмет «создать» Вот мой вид функции.
@app.route('/filters/<filename>', methods=['GET','POST'])
def AddFiltersTag(filename):
form = AddFilterTags(request.form)
if form.validate_on_submit():
html = re.sub(r'(.*?<defs>)(.*)', r'\g<1>' + add_filter_tag + add_filter + end_tag + '\g<2>', without_filter)
save_html = open('save.svg','wb')
save_html.write(html)
os.system("rsvg-convert -h 32 save.svg > icon-32.jpg")
return download_html
Так что функция AddFilterTag запускается, когда пользователь нажимает кнопку «Отправить» в моей форме. но в этом случае я хочу загрузить, приведенный выше код просто сохраняет файл как .svg и преобразует его позже, используя os.system, но я хочу загрузить версию .jpg напрямую. Есть ли способ сделать это?
Не пробовал это сам, так как я не использую флягу, но для библиотеки rsvg вы можете использовать привязки python, которые вы, возможно, захотите использовать. Таким образом, вы можете передать содержимое из «html» напрямую, а не записывать их в файл svg, который будет использоваться в качестве параметра в команде «rsvg-convert». – CodeSurgeon