2014-12-19 10 views
6

Mam skrypt, który zmienia rozmiar płótna w celu dopasowania do obrazu, który jest na nim ładowany, a następnie pobiera obraz z płótna. Muszę zmienić rozmiar, albo pobrany obraz zawiera wszelkie białe znaki i wygląda na mniejszy niż powinien.Poczekaj, aż zmiany CSS (zmiana rozmiaru) zostaną zastosowane przed kontynuowaniem skryptu.

originalImg.onload = function() { 

    var width = originalImg.width; 
    var height = originalImg.height; 

    $("#myCanvas").css({ "height": height + "px", "width": width + "px", "margin-bottom": -height + "px" }); 

    var c = viewer.drawer.canvas; 

    c.toBlob(function(blob) { 
     saveAs(blob, '@Model.DatabaseName' + '.jpg'); 
    }); 
} 
originalImg.src = originalSrc; 

Ale po pobraniu obrazu nadal ma wszystkie białe znaki. Mój skrypt kończy się przed zmianą rozmiaru płótna, mimo że zmieniam go na samym początku. Jak mogę zmienić rozmiar płótna przed ukończeniem reszty skryptu?

edytuj: Widzę krok po kroku, że cały skrypt kończy się, zanim płótno zmieni rozmiar strony.

+0

Metoda 'css()' powinna być synchroniczna (chyba że w CSS zastosowano 'przejścia '). Czy możesz podać przykład problemu w http://jsfiddle.net? –

+0

Nie, naprawdę nie mogę. Moja strona ładuje obrazy DZI na seadragonowej przeglądarce, która wymaga klucza dostępu, który jest pobierany przez serwer. Nie mogę tego zreplikować na jsfiddle. –

+0

umieść 'console.log' info lub' alert' wewnątrz funkcji 'originalImg.onload', aby zobaczyć, czy faktycznie wchodzi w kod. – dsharew

Odpowiedz

0

Zmieniasz CSS dla obszaru roboczego, ale zmienia on tylko rozmiar wyświetlany na ekranie, a nie faktyczny rozmiar samego elementu canvas. Możesz przeskalować element canvas za pomocą CSS bez zmiany jego zawartości.

Spróbuj utworzyć nowy element canvas dla każdego obrazu po jego załadowaniu, a następnie ustaw dla niego rozmiar odpowiedniego płótna, który powinien być zapisany poprawnie.

Jeśli chcesz zachować graficzną reprezentację obrazu w istniejącym kanwie/znacznikach, to nie ma problemu, możesz skopiować obraz do obu, a "robocze" płótno ukryć z dala od widoku.

Powiązane problemy