rafik73
2.01.2020, 15:12:15
Witam
Za pomocą biblioteki dom-to-image tworzę obrazek z DIV'a:
var pdf = $('#pdf_area > .ol-viewport')[0];
domtoimage.toJpeg(pdf,
{
quality : 1
}
)
.then(function (dataUrl) {
$.ajax({
url : "dec.php",
data : {
ajax_dataUrl : dataUrl
}
,
context: this,
success : function(callback) {
} , //success
}); //ajax
Stosując typeof wyszło mi, że dataUrl to string. Wysyłam go do pliku dec.php który wygląda tak:
$ajax_dataUrl = isset($_POST['ajax_dataUrl']) ?
$_POST['ajax_dataUrl'] : '';
$src = '1.jpg';
$img = imagecreatefromjpeg($src);
$new_x = 828;
$new_y = 536;
//$new_x = 424;
//$new_y = 268;
$img_new = imagecreatetruecolor($new_x, $new_y);
imagecopyresampled($img_new, $img, '0', '0', '0', '0', $new_x, $new_y, imagesx($img), imagesy($img));
imagejpeg($img_new, $src, 100);
imagedestroy($img);
// Change DPI
$dpi_x = 144;
$dpi_y = 144;
// Read the file
// Update DPI information in the JPG header
$img_new[13] = chr(1);
$img_new[14
] = chr
(floor($dpi_x / 255
)); $img_new[15] = chr( $dpi_x % 255);
$img_new[16
] = chr
(floor($dpi_y / 255
)); $img_new[17] = chr( $dpi_y % 255);
// Write the new JPG
$f = fopen('thumb_'.$src, 'w');
Skrypt ten ma za zadanie zmianę DPI pliku 1.jpg a chciałbym, żeby to robił w odniesieniu do
obrazka który wysyłam zmienną $ajax_dataUrl. Nie za bardzo wiem jak zmienić powyższy skrypt PHP.
nospor
2.01.2020, 15:18:38
Noto zamiast imagecreatefromjpeg uzyj
https://www.php.net/manual/en/function.imag...efromstring.phpps:
Cytat
Stosując typeof wyszło mi, że dataUrl to string.
Do sprawdzania zawartosci nie uzywa sie typeof. Co z tego ze wiesz ze to tekst, skoro tam moze byc zupelnie inny tekst niz sie spodziewales.
Uzywaj
console.log()
by miec pewnosc co zawiera zmienna
rafik73
2.01.2020, 15:18:44
To próbowałem ale nie działa
dałem
alert(dataUrl);
i wyszło:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQH/wAARCAKeBAsDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKF
hcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJ
WWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkN
OEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkp
OUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+2Cvxc6AoAKAFAyQB1Jxz71dODqThTjbmnKMFfRXk0lf5sFq0u5qCNAgQgEAY56/X6n2r7uODw6w8MNKnGpThFJc0Ve/Wae8ZSd22ne73N7K1raf1/VxURUG1RgdavDYalhafsqMbRu5Nt3lJvrJ6XsrJeS+YJJbf8E89+JvhfW/Fnh4aXol9FaSm6jluYZ2aOG9t1DAwyTIGZAjlZQuxlkK7WA4NfS8PZlg8sxzxGMoyqx9nKNOcEpTozun
zKLaTuly3umr3PluLsnzHOssWEy7EQoy9tCdalUk4U8RSV/clUipSjyytPls4ztZ9DH+GPwybwMLu+vb8Xmq38K28qWvmLY28CusoRBIFe4lMigmd449i5SNAGdn6+IuIlnPs6FGg6WGozdSMqnK605tOPM+W6hHldlBSld6yeyjxcI8Ivh322JxGJVfGYmmqU4UeZYelTUoz5VzWlVnzJfvJRgoq8YxV5Sl65Xyx9uF
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
BQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQ
nospor
2.01.2020, 15:19:13
Super, a skad my mamy wiedziec jak probowales? Pewnie probowales zle. Pokaz jak probowales...
rafik73
2.01.2020, 15:21:23
patrz wyżej
nospor
2.01.2020, 15:22:11
Wyzej NADAL nie napisales jak probowales....
rafik73
2.01.2020, 15:23:46
zamieniłem:
$src = $ajax_dataUrl;
$img = imagecreatefromjpeg($src);
na
$src = $ajax_dataUrl;
$img = imagecreatefromstring($src);
nospor
2.01.2020, 15:29:36
W linku do ktorego ciebie odeslalem, masz JEDEN przyklad uzycia. Byloby milo, jakbys raczyl PRZEANALIZOWAC ten przyklad ktory tam podali gdyz zawarte tam sa bardzo wazne informacje na temat tego jak uzywac tej funkcji w przypadku danych, ktore wlasnie ty masz. Jedyne co musisz zrobic to delikatnie go dopasowac do swojego przypadku
Poza tym, rowniez dalej w swoim kodzie
$size = filesize($src);
$img_new = file_get_contents($src);
masz kod, ktory zaklada, ze $src to sciezka pliku. To tez masz poprawic
rafik73
2.01.2020, 16:46:46
Na początek dałem tak:
$src = $ajax_dataUrl;
$img = imagecreatefromstring($src);
nospor
2.01.2020, 16:47:45
Zauwaz, ze twoj tekst nie sklada sie z samego base64. Na poczatku ma pare znakow, ktore masz usunac wpierw...
rafik73
2.01.2020, 17:13:11
Masz na myśli nagłówek?
nospor
2.01.2020, 17:44:33
data:image/jpeg;base64,
rafik73
2.01.2020, 18:03:27
dałem:
$del_string = 'data:image/jpeg;base64,';
$img = imagecreatefromstring($src);
wyskakuje błąd:
Notice: imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file in
nospor
2.01.2020, 18:06:36
1) Uzywasz jakiejs zmiennej $string ktorej dotad jeszcze nie widzialem.
2) $src = base64_decode($src);
Zapisz sobie zmienna $src po odkodowaniu jako plik jpg i sprawdz co zawiera i czy mozesz w ogole go otworzyc normalnie
rafik73
2.01.2020, 18:08:39
$string to przesyłany ciąg znaków zawarty w dataUrl . Tak jest mi łatwiej testować pomijając Ajax
$str zawiera (wyświetlam skróconą wersję):
����JFIF��C��C����� ���}!1AQa"q2���#B��R��$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������
a obrazek jest czarny i tylko na samej górze widać fragment zniekształconej grafiki
nospor
2.01.2020, 18:16:02
Wiec pewnie cos zle tego base64 skopiowales. Jak skopiowales go z tego co pokazywal ci alert to moglo sie pokaszanic. Lepiej zapisz z tego co otzymujesz po wyslaniu ajaxem
trueblue
2.01.2020, 18:18:05
A to: "& #65533;" skąd się wzięło?
rafik73
2.01.2020, 18:24:59
po odpaleniu Ajaxa i wygenerowaniu pliku obrazek jest ok
ale pozostaje nieszczęsne:
nospor
2.01.2020, 19:41:07
Kurcze, no ale wez troche samodzielnosci tu walnij. Wszystko mamy ci podac jak na tacy? nawet tak banalne rzeczy?
Zajrzyj do manuala, zobacz co robi filesize() i pomysl przez chwile sam jak to zastapic w odniesieniu do tekstu... To samo z file_get_contents.
rafik73
2.01.2020, 19:57:15
strlen()
nospor
2.01.2020, 20:02:16
Brawo
rafik73
2.01.2020, 20:05:41
Myślę, że doszedłem do ładu:
$ajax_dataUrl = isset($_POST['ajax_dataUrl']) ?
$_POST['ajax_dataUrl'] : '';
$del_string = 'data:image/jpeg;base64,';
//$img = imagecreatefromstring($src);
$img = $src;
$new_x = 828;
$new_y = 536;
//$new_x = 424;
//$new_y = 268;
$img_new = imagecreatetruecolor($new_x, $new_y);
imagecopyresampled($img_new, $img, '0', '0', '0', '0', $new_x, $new_y, imagesx($img), imagesy($img));
imagejpeg($img_new, $src, 100);
imagedestroy($img);
// Change DPI
$dpi_x = 144;
$dpi_y = 144;
// Read the file
$img_new = $src;
// Update DPI information in the JPG header
$img_new[13] = chr(1);
$img_new[14
] = chr
(floor($dpi_x / 255
)); $img_new[15] = chr( $dpi_x % 255);
$img_new[16
] = chr
(floor($dpi_y / 255
)); $img_new[17] = chr( $dpi_y % 255);
// Write the new JPG
$f = fopen('test.jpg', 'w');
file_get_content czyta zawartość do stringa, a ja takową zawartość już posiadam w $src po obcięciu nagłówka.
nospor
2.01.2020, 20:10:19
Cytat
file_get_content czyta zawartość do stringa, a ja takową zawartość już posiadam w $src po obcięciu nagłówka.
Dokladnie tak. Jak widzisz trudne to nie bylo
rafik73
3.01.2020, 13:00:08
Dziękuję za pomoc. Ech, jak się człowiek zasiedzi nad projektem to zamulenie kieruje człowieka na ścieżkę łatwizny a to nie tędy droga. Czas na mały reset zasobów. Pozdrawiam i dziękuję.
Ostatnia prośba. Jest już późno i mam dosyć. Próbuję pobrać ten obrazek w ten sposób:
header("Content-Type: image/jpeg"); header('Content-Disposition: attachment; filename="ff.jpg"');
i nie działa.
Zależy mi na opcji SAVE AS.
Aha, działa:
$f = fopen('test.jpg', 'w');
OK, już sobie poradziłem. Problem był w tym, że skrypt PHP działał wywołany Ajaxem. Zwróciłem obrobiony obrazek callback'iem
i wyświetliłem w JS:
PHP:
$ajax_dataUrl = isset($_POST['ajax_dataUrl']) ?
$_POST['ajax_dataUrl'] : ''; $ajax_pdf_zoom_number = isset($_POST['ajax_pdf_zoom_number']) ?
$_POST['ajax_pdf_zoom_number'] : '';
$path = $ajax_dataUrl;
$del_string = 'data:image/jpeg;base64,';
$callback = $del_string.$enc;
/*
$f = fopen('Zoom_numer'.$ajax_pdf_zoom_number.'.jpg', 'w');
fwrite($f, $image);
fclose($f);
*/
JS:
var pdf = $('#pdf_area > .ol-viewport')[0];
domtoimage.toJpeg(pdf,
{
quality : 1
}
)
.then(function (dataUrl) {
// alert(dataUrl);
//########################################################
$.ajax({ // ajax
type : "POST",
url : "dec2.php",
data : {
ajax_dataUrl : dataUrl,
ajax_pdf_zoom_number : pdf_zoom_number
}
,
context: this,
success : function(callback) {
var link = document.createElement('a');
link.download = 'Zoom_numer_' + pdf_zoom_number +'.jpg';
link.href = callback;
link.click();
} //success
}); //ajax
A jak aktywować pobieranie tego pliku bez callbacku Ajaxa?
nospor
3.01.2020, 13:18:48
A zes sie tego callback uczepil... Tu nie masz zadnego callback tylko zwykly response. I co ci on przeszkadza?
A jak chcesz normalnie to normalnie masz slac forma a potem naglowkami leciec jak miales oryginalnie
rafik73
3.01.2020, 13:22:15
Myślę, że response (callback) wysyła plik od klienta na serwer co wydłuża proces oczekiwania na pobieranie.
Próbuję tak, ale nie chodzi:
header("Content-type: image/jpeg"); header('Content-Disposition: attachment; filename="'.basename("eee.jpg").'"');
nospor
3.01.2020, 13:32:57
Kurcze...
nawet jak uzyjesz slowo callback w nawiasie, to nadal jest w BLEDZIE. Przestan uzywac slowo callback w tym kontekscie bo to jest zle.
Rowniez response to nie idzie z przegladarki na serwer tylko z serwera do przegladarki. REQUEST idzie z przegladarki na serwer. Zapoznaj sie z tymi podstawomi pojeciami i przestan w koncu ich uzywac bez skladu i ladu.
I nie, mowilem ci ze headers masz dawac w normalnym wyslaniu forma a nie w ajax
rafik73
3.01.2020, 13:57:42
Ok,
1) wysyłam plik do obróbki za pomocą AJAX do skryptu PHP który modyfikuje jego DPI.
2) chcę, żeby zmodyfikowany obrazek był automatycznie pobrany bez powrotu do JS
3) co masz na myśli pisząc "wysłać formą"?
nospor
3.01.2020, 14:37:20
No masz to wyslac jako normalny formularz. O
<form>
.....
</form>
slyszal?
Jednak nawet jesli wyslesz to jako normalny form, to nadal te bajty obrazka bedziesz slal na serwer wiec za bardzo nie wiem jaki z tego zysk bedziesz mial. Generalnie, jak chccesz by serwer ci przetworzył ten obrazek to tak czy siak na ten serwer musisz go wyslac niewazne jak. Wiec argument o wolnym wysylaniu na serwer jakos nie pasuje.
trueblue
3.01.2020, 14:44:30
Jeśli wysłałeś w response zakodowany w base64 obrazek, to kiedy wywołujesz kliknięcie na linku, to obrazek nie jest pobierany ponownie z serwera, tylko bezpośrednio z przeglądarki.
Nawet gdyby Ci się udało wywołać pobierane bezpośrednio w PHP, to nic na tym nie zaoszczędzisz.
rafik73
3.01.2020, 15:07:10
Cytat(nospor @ 3.01.2020, 14:37:20 )

No masz to wyslac jako normalny formularz. O
<form>
.....
</form>
slyszal?
Jednak nawet jesli wyslesz to jako normalny form, to nadal te bajty obrazka bedziesz slal na serwer wiec za bardzo nie wiem jaki z tego zysk bedziesz mial. Generalnie, jak chccesz by serwer ci przetworzył ten obrazek to tak czy siak na ten serwer musisz go wyslac niewazne jak. Wiec argument o wolnym wysylaniu na serwer jakos nie pasuje.
Słyszał. Myślałem, że chodzi ci o formularz zamiast ajaxa, a nie o wysłanie obrazka formularzem.
Cytat(trueblue @ 3.01.2020, 14:44:30 )

Jeśli wysłałeś w response zakodowany w base64 obrazek, to kiedy wywołujesz kliknięcie na linku, to obrazek nie jest pobierany ponownie z serwera, tylko bezpośrednio z przeglądarki.
Nawet gdyby Ci się udało wywołać pobierane bezpośrednio w PHP, to nic na tym nie zaoszczędzisz.
Skoro tak to odpuszczam dziwaczenie. Tylko jak na niecały 1MB obrazka to trochę muli ta cała operacja.
trueblue
3.01.2020, 15:10:10
Cytat(rafik73 @ 3.01.2020, 15:07:10 )

Skoro tak to odpuszczam dziwaczenie. Tylko jak na niecały 1MB obrazka to trochę muli ta cała operacja.
A jeśli nie wstawiasz do linku zawartości response, to również trwa długo (zamiast kliknięcia wstaw alert)?
rafik73
3.01.2020, 15:22:32
Tak.
na localhoscie trwa to błyskawicznie
nospor
3.01.2020, 15:23:33
Nom, czyli dlugi czas to efekt wysylania na serwer i obrobki przez serwer
rafik73
3.01.2020, 15:28:02
Cytat(nospor @ 3.01.2020, 15:23:33 )

Nom, czyli dlugi czas to efekt wysylania na serwer i obrobki przez serwer
No to tego się nie przeskoczy, chyba, że mi światłowód podciągną

1MBit wysyłania na VDSL i wszystko jasne (jeśli oczywiście osiągnie maksa). Muszę zrobić test i udostępnić net z LTE, tam wysyłanie szybsze.
nospor
3.01.2020, 15:29:24
1MB to 1 MegaByte a nie jeden MegaBit - to tak w kwestii rzeczy, ktore znowu mylisz
rafik73
3.01.2020, 15:36:36
Napisałem 1 MBit a nie 1 MB, czepiasz się o literówkę (duże b zamiast małego)
https://pl.wikipedia.org/wiki/MegabitCzasem wyluzuj chłopie bo mi się to zaczyna kojarzyć z Adasiem Miauczyńskim z "Dnia Świra" - wszystko poprawiał (nerwica natręctw).
Życie to nie bity- 1 lub 0, ale kubity
https://pl.wikipedia.org/wiki/KubitPozdrawiam i dziękuję
nospor
3.01.2020, 15:41:31
No wlasnie nie. W poscie nr 31 napisales 1MB a pare postow pozniej napisales 1MBit. Ewidetnie wynika, ze dla ciebie to jedno i to samo.
A najlepsze jest to, ze jak ciebie poprawiam, to mi wysylasz linka do wikipedii ze niby ty masz racje, a tam wyraznie rozroznione jest MB od Mb/Mbit (b z malej litery) co tylko udowadnia ze ty sie myliles
I bym ciebie nie poprawial o te nieszczesnie bity gdybys wczesniej nie popelnial tylu innych bledow. Operujesz na pojeciach, ktorych nie rozumiesz i tylko wprowadzasz innych i siebie w blad. No ale jak wolisz tak zyc, twoja sprawa
rafik73
3.01.2020, 15:55:46
W poście 31 odniosłem się do wielkości obrazka w megabajtach a w poście 35 do prędkości wysyłania łącza w megabitach. Co do reszty masz absolutną racje - totalnie to pokiełbasiłem na zasadzie "gdzieś dzwoni ale nie wiem gdzie", ale do końca nie jest tak,że kompletnie nie znam tych pojęć - taki los niedzielnego "programisty" - więc proszę o wyrozumiałość.
nospor
3.01.2020, 15:58:21
A widzisz, zle zrozumialem
Cytat
1MBit wysyłania na VDSL
Sadzilem ze wysylasz 1MB danych a nie dane z predkoscia 1Mbit - b z malej

A Dzien Swira uwielbiam - tak to o mnie
rafik73
3.01.2020, 16:26:37
Tak sobie pomyślałem, że jakby zmienić DPI za pomocą JavaScript to wszystko działoby się po stronie przeglądarki i szybkość by bardzo wzrosła. Tylko jak przerobić ten skrypt PHP na JS?
trueblue
3.01.2020, 17:19:41
A skąd wiesz czy wolne działanie skryptu nie jest spowodowane skryptem JS do robienia "zrzutów ekranowych"?
Być może problem leży w samym przetwarzaniu elementów HTML na Canvas, albo kompresją obrazu do JPEG.
Swoją drogą pogarszasz jakość dwukrotnie. Raz kiedy właśnie z HTML jest tworzony JPEG, a potem kiedy ten JPEG staje się źródłem dla celów skalowania i tworzysz ponownie JPEG. Może lepiej i szybciej byłoby tworzyć PNG, a potem JPEG.
Warto też zajrzeć do dokumentacji domtoimage. Są tam parametry width oraz height, być może już w tym momencie będziesz mógł zmienić skalę, bez potrzeby zaprzęgania PHP.
nospor
3.01.2020, 17:21:06
Cytat
A skąd wiesz czy wolne działanie skryptu nie jest spowodowane skryptem JS do robienia "zrzutów ekranowych"?
Napisal wczesniej, ze na localhost dziala jak ta lala, wiec problem przegladarki mozna raczej wykluczyc
rafik73
6.01.2020, 18:12:21
Cytat(trueblue @ 3.01.2020, 17:19:41 )

A skąd wiesz czy wolne działanie skryptu nie jest spowodowane skryptem JS do robienia "zrzutów ekranowych"?
Być może problem leży w samym przetwarzaniu elementów HTML na Canvas, albo kompresją obrazu do JPEG.
Swoją drogą pogarszasz jakość dwukrotnie. Raz kiedy właśnie z HTML jest tworzony JPEG, a potem kiedy ten JPEG staje się źródłem dla celów skalowania i tworzysz ponownie JPEG. Może lepiej i szybciej byłoby tworzyć PNG, a potem JPEG.
Warto też zajrzeć do dokumentacji domtoimage. Są tam parametry width oraz height, być może już w tym momencie będziesz mógł zmienić skalę, bez potrzeby zaprzęgania PHP.
Maksymalny i optymalny rozmiar diva z którego tworzone jest zdjęcie jaki mi się udało zrobić to 1035x670 px. Potrzebuję uzyskać rozmiar do wydruku: 14,6x9,5 cm. Żeby uzyskać taki rozmiar muszę ustawić DPI na 180. W ten sposób jakość zdjęcia jest bardzo dobra i czytelna.
Tak więc skalowanie muszę przeprowadzać DPI a nie rozdzielczością.
Tym bardziej, że zmniejszając rozdzielczość tracę jakość i dochodzi blur.
Nie znajdzie się nikt, kto dałby radę przerobić to rozwiązanie w 100% na JavaScript?
trueblue
6.01.2020, 20:26:18
A dlaczego skalujesz obrazek w PHP pomimo, że pisałeś, że skalowanie musisz przeprowadzać tylko z pomocą DPI? W kodzie PHP używasz imagecopyresampled, choć oczywiście też podmieniasz bajty odpowiedzialne za DPI.
Gdybyś uzyskiwał obrazek w skali docelowej z samego domtoimage, to można by się pokusić o pobranie danych jako Blob i umieścić w typowanej tablicy, a niej podmienić bajty i zapisać do pliku.
rafik73
7.01.2020, 07:26:08
Po ostatnich przeróbkach ustawiam wymiary ma sztywno za pomocą width i height w domtoimage. A to z tego względu,że jeśli obrócę mapkę którą obramiam w Openlayers ,zmieniają się jej rozmiary - zawsze się powiększają więc cięcie do wymiaru na sztywno nie pogarsza jakości . W domtoimage istnieje funkcja toBlob. Chcesz utworzyć tablicę bajt po bajcie?
https://javascript.info/blob
trueblue
7.01.2020, 09:52:30
Tak.
https://javascript.info/blob#from-blob-to-arraybufferA z ArrayBuffer rzutować na tablicę Uint8Array. Zmienić bajty i ponownie na Blob i obrazek.
rafik73
10.01.2020, 07:46:32
trueblue
10.01.2020, 09:23:39
Również na identycznej zasadzie. Szkoda, że nie pokusiłeś się sam o napisanie. Na pewno skrypt byłby mniejszy wagowo.
rafik73
18.01.2020, 20:17:52
Można "pociąć" tą bibliotekę i wyciągnąć tylko to co potrzebne. Szczerze to na tę chwilę nie mam czasu na zabawę, ale napewno wrócę do tematu.
Pojawił się kolejny problem, tym razem z CORS. Kiedy próbuję zapisać canvas do pliku graficznego wyskakuje mi taki błąd:
Uncaught (in promise) DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
at makeNodeCopy
Ma ktoś doświadczenie z CORS? Jak obejść to zabezpieczenie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.