2016-02-08 3 views
0

Я работаю над приложением VS2015 cordova. У меня есть проблема, когда я получаю изображение из галереи и искажаю его в base64string. Я получил base64string успешно, но когда я его отладил, я всегда получаю черное изображение. Вот мой код:Преобразование изображения в base64string в visualstudio apache cordova

function onPhotoURISuccess(imageURI) { 
    var largeImage = document.getElementById('smallImage'); 
    largeImage.style.display = 'block'; 
    largeImage.src = imageURI; 
    basestrg = encodeImageUri(imageURI); 

} 

function getPhoto(source) { 
      navigator.camera.getPicture(onPhotoURISuccess, onFail, { 
     destinationType: Camera.DestinationType.NATIVE_URI, mediaType: Camera.MediaType.Photo, 
     sourceType: source 
    }); 
} 
function encodeImageUri(imageUri) { 
    var c = document.createElement('canvas'); 
    var ctx = c.getContext("2d"); 
    var img = new Image(); 
    img.onload = function() { 
     c.width = this.width; 
     c.height = this.height; 
     ctx.drawImage(img, 0, 0); 
    }; 
    img.src = imageUri; 
    var dataURL = c.toDataURL("image/jpeg"); 
    return dataURL; 
} 

любые идеи

ответ

1

я пытался получить ваш конкретный код работает, но я видел один и тот же конечный результат с черным ящиком.

Я думаю, что есть более простой способ достичь вашей цели. Вместо того, чтобы передавать в NATIVE_URI в качестве целевого типа, есть опция, называемая DATA_URL, которую вы можете использовать. Этот параметр DATA_URL предоставит вам кодировку base64, которую вы затем можете использовать в элементе изображения.

Вот код, который работал для меня, когда я разместил его в вашей функции getPhoto(). Я приспособил это от Cordova Camera Plugin Documentation:

navigator.camera.getPicture(onSuccess, onFail, { 
    destinationType: Camera.DestinationType.DATA_URL, 
    mediaType: Camera.MediaType.PICTURE, 
    sourceType: source 
}); 

function onSuccess(imageData) { 
    var image: any = document.getElementById('myPicture'); 
    image.src = "data:image/jpeg;base64," + imageData; 
} 

function onFail(message) { 
    alert('Failed because: ' + message); 
} 
+0

она работала нормально, но есть ли способ низкого разрешения изображения, когда я загрузить его из галереи? – prime

+0

Интересный вопрос - ваша цель снизить разрешение при загрузке на другой сервер? Если да, то я вижу, что вы пытаетесь сделать с Canvas, и это похоже на решение, которое может работать, если вы можете пройти через черный ящик (я не уверен, как это сделать) –

Смежные вопросы