Как да запазите платно на телефона и да получите местоположението на изображението с phonegap?

Какъв е начинът да запазите платно в албума на телефона си (ролка от фотоапарат и т.н.) с помощта на Phonegap?

И когато се запише, как да получа URL адреса на изображението с помощта на Cordova? Кои добавки трябва да взема предвид за това?


Метод 1: Добавка Canvas2Image

С този плъгин можете да запазите платно в библиотеката на телефона си, като използвате:

<canvas id="myCanvas" width="165px" height="145px"></canvas>

function onDeviceReady()
{
    window.canvas2ImagePlugin.saveImageDataToLibrary(
        function(msg){
            console.log(msg);
        },
        function(err){
            console.log(err);
        },
        document.getElementById('myCanvas')
    );
}

Не е ясно обаче как imageURI се предава или връща след запазване?

АКТУАЛИЗАЦИЯ 23/02. Опитах следното, но така и не достигна успешното обратно извикване:

$scope.done = функция() {

    // todo: iterate over cloaks
    $ionicLoading.show({
            template: 'Saving images...'
    });


    // #issue: callback is not called
    saveCanvasToPhone().then(successCallback, errorCallback);

    var successCallback = function(output) {
        $ionicLoading.hide();

        window.alert("success call back: " + output) // never reached

        $scope.addNewImage(output);
        $state.go('tab.dash', {}, {reload: true}); // does not work
        $state.go('tab.dash') // does not work

        $scope.refreshLocalstorage();

    }

    // #issue4-nl: not working
    var errorCallback = function(error) {
        $ionicLoading.hide();
        console.log("error cb: "+ error)
        window.alert("error cb: " + error)
    }

    function saveCanvasToPhone() {



        var defer = $q.defer();

        try {
            window.canvas2ImagePlugin.saveImageDataToLibrary(
            function(output){

                $scope.addNewImage(output); // does not work to save imagepath on localstorage

                $scope.debugEntryOther = output // works fine
                defer.resolve(output)
                $ionicLoading.hide()
            },
            function(error){
                defer.reject(error)
                $ionicLoading.hide()
                window.alert(error)
            },
            document.getElementById('canvas')
        );
        } catch(error) {
                defer.reject(error)
                $ionicLoading.hide()
                console.log("saveCanvasToPhone: trycatch: error: " + error)
        }
        return defer.promise;
    } // save canvas to phone
} // done

person AMG    schedule 23.02.2015    source източник


Отговори (1)


За съжаление плъгинът Canvas2Image първоначално е проектиран да запазва платното в галерията, а не да записва във файл и да се занимава с файла по-късно.

Не намерих алтернативи на този плъгин (нито пък наистина съм търсил), но можете да успеете да получите пътя на файла, където е записан файлът.

Зависи към коя платформа сте се насочили:

  • За android пътят до файла се предава в параметъра „msg“ на функцията за успех
  • За Windows Phone параметърът „msg“ връща низа „Image saved:“, последван от пътя на файла. Така че трябва да разделите низа.
  • За IOS всъщност не е възможно с оригиналния плъгин, но има няколко разклонения, които позволяват да го направите.

Бях информиран, че авторът скоро ще отдели известно време, за да подобри своя плъгин, така че съм сигурен, че скоро ще бъде възможно да се получи пътят на файла с „официалния“ плъгин дори за IOS.

Междувременно можете да използвате моята вилица. В този случай за IOS пътят се връща в параметъра 'msg', точно както за android.

person QuickFix    schedule 23.02.2015
comment
Благодаря за това. Това звучи притеснително. Опитах го, но не достига до моя успех, обратно обаждане, вижте актуализираната ми публикация с коментари къде работи и къде не. Може би има друг начин да се справите с платно? може би конвертиране в изображение и след това плъгин за запазване на изображения (изтегляне от локално хранилище)? така че тогава ще ми трябва платно за изображение в браузъра...? - person AMG; 23.02.2015
comment
Всъщност можете да се справите с canvas само с HTML5, но причината, поради която имах нужда от този плъгин, беше, че поддръжката на canvas в android webview не работеше, освен ако не е насочен само към kitkat устройства. - person QuickFix; 23.02.2015