Obecnie tworzę aplikację internetową HTML5 / natywną aplikację Phonegap i nie wiem, jak zapisać płótno jako obraz canvas.toDataURL()
. Czy ktoś może mi pomóc?
Oto kod, co jest z nim nie tak?
// Moje płótno nosiło nazwę „canvasSignature”
JavaScript:
function putImage()
{
var canvas1 = document.getElementById("canvasSignature");
if (canvas1.getContext) {
var ctx = canvas1.getContext("2d");
var myImage = canvas1.toDataURL("image/png");
}
var imageElement = document.getElementById("MyPix");
imageElement.src = myImage;
}
HTML5:
<div id="createPNGButton">
<button onclick="putImage()">Save as Image</button>
</div>
.toDataURL()
, a następnie używam window.location, aby wskazać przeglądarkęappname://[data url]
. Na końcu aplikacji UIWebView ma metodę delegata, która mówi, czy powinna załadować stronę. Nasłuchujęappname://
i rozbijam, gdy się pojawia, odmawiam ładowania strony i przechwytuję adres URL danych w natywnym ciągu ... jak dobrze znasz kod iOS / Objective C?Odpowiedzi:
Oto kod. bez żadnego błędu.
źródło
To rozwiązanie umożliwia zmianę nazwy pobranego pliku:
HTML:
JAVASCRIPT:
źródło
Możesz użyć canvas2image, aby poprosić o pobranie.
Miałem ten sam problem, oto prosty przykład, który zarówno dodaje obraz do strony, jak i zmusza przeglądarkę do pobrania go:
źródło
Możesz spróbować tego; utwórz fikcyjną kotwicę HTML i pobierz stamtąd obraz, taki jak ...
źródło
Stworzyłem małą bibliotekę, która to robi (wraz z kilkoma innymi przydatnymi konwersjami). Nazywa się reimg i jest naprawdę prosty w użyciu.
ReImg.fromCanvas(yourCanvasElement).toPng()
źródło
To działa dla mnie: (tylko Google Chrome)
źródło
Podobna do odpowiedzi 1000Bugy, ale prostsza, ponieważ nie musisz tworzyć kotwicy w locie i ręcznie wywoływać zdarzenia kliknięcia (plus poprawka IE).
Jeśli ustawisz przycisk pobierania jako kotwicę, możesz go skradać tuż przed uruchomieniem domyślnej funkcji kotwicy.
onAnchorClick
Możesz więc ustawić href kotwicy na obraz kanwy base64, a atrybut pobierania kotwicy na cokolwiek chcesz nazwać swój obraz.Nie działa to w (bieżącej) przeglądarce IE, ponieważ nie implementuje atrybutu pobierania i zapobiega pobieraniu danych uris. Ale można to naprawić, używając
window.navigator.msSaveBlob
zamiast tego.Więc kotwica obsługi zdarzenia kliknięcia będzie następująco (gdzie
anchor
,canvas
ifileName
są wyszukiwań zakres):Oto skrzypce
źródło
Zamiast tego
imageElement.src = myImage;
powinieneś użyćwindow.location = myImage;
I nawet po tym przeglądarka wyświetli sam obraz. Możesz kliknąć prawym przyciskiem myszy i użyć „Zapisz łącze”, aby pobrać obraz.
Sprawdź to łącze, aby uzyskać więcej informacji.
źródło
Nie możesz użyć wyżej wymienionych metod do pobrania obrazu podczas pracy w Cordova. Będziesz musiał użyć wtyczki Cordova File . Umożliwi to wybranie miejsca zapisania i wykorzystanie różnych ustawień trwałości. Szczegóły tutaj: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/
Alternatywnie możesz przekonwertować obraz na base64, a następnie zapisać ciąg w localStorage, ale to dość szybko wypełni twój limit, jeśli masz wiele obrazów lub wysokiej rozdzielczości.
źródło
@Wardenclyffe i @SColvin, oboje próbujesz zapisać obraz za pomocą płótna, a nie kontekstu płótna. w obu przypadkach należy spróbować ctx.toDataURL (); Spróbuj tego:
Możesz również skorzystać z poniższych linków:
http://tutorials.jenkov.com/html5-canvas/todataurl.html
http://www.w3.org/TR/2012/WD-html5-author-20120329/the-canvas-element.html#the-canvas-element
źródło
toDataURL
funkcji: developer.mozilla.org/en-US/docs/Web/API/… . Chcesz wywołaćtoDataURL
element canvas: developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/…