znalazłem odpowiedzi sam, oto rozwiązanie w przypadku, gdy ktoś potrzebuje go:
Na stronie klienta, to w jaki sposób można uzyskać obraz z płótna i ustawić go w polu formularza (ukrytym polem char):
var dataURL = document.getElementById('canvas_id').toDataURL("image/png");
document.getElementById('id_hidden_image_field').value = dataURL;
a w bok django:
dodać do formularza ukryte pole o nazwie 'hidden_image_field', który będzie wykorzystywany do przekazywania danych. to pole jest prostym CharField. możesz dodać limit max_length, aby upewnić się, że obraz jest w rozsądnym rozmiarze (uwaga: nie wymiary, ale rzeczywisty rozmiar).
do analizowania danych obrazu:
import re
import base64
dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
ImageData = request.POST.get('hidden_image_field')
ImageData = dataUrlPattern.match(ImageData).group(2)
# If none or len 0, means illegal image data
if (ImageData == None or len(ImageData) == 0:
# PRINT ERROR MESSAGE HERE
pass
# Decode the 64 bit string into 32 bit
ImageData = base64.b64decode(ImageData)
i teraz imageData zawiera dane binarne, można po prostu zapisać do pliku i powinno działać.
mam nadzieję, że to pomoże.
co próbowaliście? co masz na myśli "automatycznie generowane"? czy pobierasz z listy zdjęć, czy faktycznie narysujesz jedną nową? czy sprawdziłeś to https://docs.djangoproject.com/en/dev/topics/http/file-uploads/? –
W rzeczywistości rysuję coś nowego, więc wysłanie indeksu obrazów nie będzie działać. Próbowałem użyć CharField do przesyłania danych binarnych, ale tracę niektóre dane (być może istnieje obejście, które?). obiekt pliku może być dobrym pomysłem. czy możliwe jest sfałszowanie pliku przesłanego z javascript bez przesłania żadnego rzeczywistego pliku? - dzięki –