У меня есть приложение Flask, которое использует функцию шаблона Flask для отображения такого веб-сайта
Код: Выделить всё
return render_template('editor.html',
skin_images=SKIN_IMAGES,
cloth_images=CLOTH_IMAGES,
hair_images=HAIR_IMAGES
)
Код: Выделить всё
[*]
OR Editor
[url=../]Home[/url]
Dowload
[img]{{ url_for([/img]
{% endfor %}
class="tab-pane fade"
id="ex1-tabs-2"
role="tabpanel"
aria-labelledby="ex1-tab-2"
>
{% for image in cloth_images %}
[img]{{ url_for([/img]
{% endfor %}
class="tab-pane fade"
id="ex1-tabs-3"
role="tabpanel"
aria-labelledby="ex1-tab-3"
>
{% for image in hair_images %}
[img]{{ url_for([/img]
{% endfor %}
// Render on load
renderPreview();
const componentButtons = document.querySelectorAll(".component-button");
let selected = {
skin: "default.png",
cloth: "default.png",
hair: "default.png",
};
componentButtons.forEach((button) => {
button.addEventListener("click", (e) => {
let component = button.dataset.component;
let value = button.dataset.value;
selected[component] = value;
renderPreview();
});
});
// Render on change
async function renderPreview() {
// Load images
let skin = selected.skin;
let cloth = selected.cloth;
let hair = selected.hair;
let skinImg = await fetch(`/static/skin/${skin}`);
let clothImg = await fetch(`/static/cloth/${cloth}`);
let hairImg = await fetch(`/static/hair/${hair}`);
let imSkin = await createImageBitmap(await skinImg.blob());
let imCloth = await createImageBitmap(await clothImg.blob());
let imHair = await createImageBitmap(await hairImg.blob());
// Composite
let canvas = document.createElement("canvas");
canvas.getContext("2d").drawImage(imSkin, 0, 0);
// canvas.getContext("2d").globalCompositeOperation = "destination-atop";
canvas.getContext("2d").drawImage(imCloth, 0, 0);
// canvas.getContext("2d").globalCompositeOperation = "destination-atop";
canvas.getContext("2d").drawImage(imHair, 0, 0);
// Update preview
document.getElementById("preview").src = canvas.toDataURL();
}
function old_old_renderPreview() {
// Get component selections
let skin = document.getElementById("skin").value;
let cloth = document.getElementById("cloth").value;
let hair = document.getElementById("hair").value;
// Call Flask route to render preview
fetch(
"/render_preview?skin=" + skin + "&cloth=" + cloth + "&hair=" + hair
)
.then((response) => response.blob())
.then((imageBlob) => {
document.getElementById("preview").src = URL.createObjectURL(
imageBlob
);
});
}
// Get component selections
function downloadAvatar() {
let skin = document.getElementById("skin").value;
let cloth = document.getElementById("cloth").value;
let hair = document.getElementById("hair").value;
let query = `/render_preview?skin=${skin}&cloth=${cloth}&hair=${hair}`;
// Trigger download
fetch(query)
.then((response) => response.blob())
.then((blob) => {
let url = URL.createObjectURL(blob);
let a = document.createElement("a");
a.href = url;
a.download = "avatar.png";
a.click();
});
}
// Add click handler
document
.getElementById("downloadBtn")
.addEventListener("click", downloadAvatar);
Код: Выделить всё
File "c:\Users\[REDACTED]\.vscode\extensions\ms-python.debugpy-2024.2.0-win32-x64\bundled\libs\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 294, in _get_code_from_file
code = compile(f.read(), fname, 'exec')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\GitHub\ormaker\templates\editor.html", line 1
Источник: https://stackoverflow.com/questions/781 ... ctype-html