javascript
  • jquery
  • html5
  • 2013-09-16 42 views 4 likes 
    4

    我有幾個畫布定位在彼此合併成一個數據URI。一切工作正常,我可以得到複合圖像顯示在頁面上,但我需要的其他funcitonality是創建的URI,然後分享到Facebook。我想盡量做到這一點,而不發送到服務器,並做到所有客戶端。是否可以使用數據URI共享圖像到Facebook?

    的代碼是沒有必要的問題,但如果你想看到它

    <ul class="button-group even-2"> 
             <li><span id='merge-canvas' class="button expand">Save Image</span></li> 
             <li><span id='share-facebook' class="button expand facebook" >Share</span></li> 
    </ul> 
    

    使用JavaScript這樣看。

    // DROPBOX AND FILE READER 
    
    function noopHandler(evt) { 
         evt.stopPropagation(); 
         evt.preventDefault(); 
        } 
    
        function drop(evt) { 
         evt.stopPropagation(); 
         evt.preventDefault(); 
    
        var files = evt.dataTransfer.files; 
        var count = files.length; 
    
        // Only call the handler if 1 or more files was dropped. 
        if (count > 0) { 
    
        } 
         handleFiles(files); 
    
    } 
    
    function handleFiles(files) { 
        var file = files[0]; 
    
        document.getElementById("droplabel").innerHTML = "Processing " + file.name; 
    
        var reader = new FileReader(); 
    
        // init the reader event handlers 
        reader.onloadend = handleReaderLoadEnd; 
    
        // begin the read operation 
        reader.readAsDataURL(file); 
    } 
    
    function handleReaderLoadEnd(evt) { 
    
        // basically clears and redraws the face canvas on load of the users image 
        document.getElementById("droplabel").innerHTML = "Picture Added Successfully!"; 
        var $canvas = $('canvas'); 
        ctx = $canvas[0].getContext('2d'); 
        face = new Image(); 
        face.onload = function() { 
         ctx.drawImage(face, 0, 0, 500, (face.height/face.width) * 500); 
         } 
    
        face.src = evt.target.result; 
        return face; 
    } 
    
    function initializeDropbox() { 
        var dropbox = document.getElementById("dropbox") 
    
        // adds different events for the dropbox and points to the relevant function 
    
        dropbox.addEventListener("dragenter", noopHandler, false); 
        dropbox.addEventListener("dragexit", noopHandler, false); 
        dropbox.addEventListener("dragover", noopHandler, false); 
        dropbox.addEventListener("drop", drop, false); 
    } 
    

    它產生一個非常長的數據URI! 任何想法來完成分享?

    +0

    你可以使用FORMDATA()把一個blob到文件輸入,就就提交而言。如果你有一個Facebook上的網址上傳到,你應該能夠提交該blob的URL就像一個真實的文件。 – dandavis

    +0

    謝謝!讓我試試看,我會回來! –

    +0

    嗯,好吧,所以我得到了blob的工作,它出來作爲一個圖像對象,但我不認爲可以接受整個圖像文件...我覺得唯一的選擇是上傳到服務器,然後分享網址...我能想到的唯一的另一個解決方法是,如果有一種方法可以使它直接使用數據URI而不會中斷。 –

    回答

    1

    您可以在源參數通過URL或者多/ form-data發佈的圖像:

    https://developers.facebook.com/docs/graph-api/reference/v2.1/user/photos

    /* make the API call */ 
    FB.api(
        "/me/photos", 
        "POST", 
        { 
         "source": "{image-data}" 
        }, 
        function (response) { 
         if (response && !response.error) { 
         /* handle the result */ 
         } 
        } 
    ); 
    
    相關問題