How to save using Javascript Image cropper "Croppie"

Croppie uses a DIV container, not CANVAS, to trim it. I am trying to figure out how to save the resulting cropped image from this DIV to a directory on the server, for example, using the SAVE button.

Here is my HTML code ...

<!-- begin snippet: js hide: false -->

<!-- language: lang-html -->

    <!DOCTYPE html>
    <html>
    <head>
        <title>Demo Croppie</title>
        <link rel="Stylesheet" type="text/css" href="css/croppie.css" />
        <link rel="Stylesheet" type="text/css" href="css/sweetalert.css" />

    </head>
    <body>

        <div id="testCanvas"></div>
        <div class="actions" style="margin-left: auto; margin-right: auto; width:250px;">
            <button class="vanilla-result">Result</button>
            <button class="vanilla-rotate" data-deg="-90">Rotate Left</button>
            <button class="vanilla-rotate" data-deg="90">Rotate Right</button>
        </div>

    <p><button onclick="function();">Save</button></p>


    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="js/croppie.js"></script>
    <script src="js/demo.js"></script>
    <script src="js/sweetalert.min.js"></script>
        <script>
          Demo.init();
        </script>

    </body>
    </html>

Here are my JavaScript settings ...

function demoVanilla() {
    var vanilla = new Croppie(document.getElementById('testCanvas'), {
        viewport: { width: 300, height: 300, type: 'square' },
        boundary: { width: 350, height: 350 },
        enableOrientation: true
    });
    vanilla.bind({
        url: 'imgs/demo-1.jpg',
        orientation: 1
    });

    document.querySelector('.vanilla-result').addEventListener('click', function (ev) {
        vanilla.result('canvas').then(function (src) {
            popupResult({
                src: src
            });
        });
    });

    $('.vanilla-rotate').on('click', function(ev) {
        vanilla.rotate(parseInt($(this).data('deg')));
    });
}

The rest comes by default unchanged from Croppie at https://github.com/Foliotek/Croppie such as demo.js etc.

+4
source share
2 answers

GET IT!

Thanks to one of the developers of Croppie "thedustinsmith" and "TWFPSP" for directing me to the right eternal resources and their proposed information.

$( document ).ready(function() {
    vanillaRotate = document.querySelector('.vanilla-rotate');
    var $uploadCrop = $('#upload-demo');
        $uploadCrop.croppie({
            viewport: {
                width: 250,
                height: 250,
                type: 'square'
            },
            boundary: {
                width: 300,
                height: 300
            }
        });
        $uploadCrop.croppie('bind', 'imgs/cat.jpg');
        vanillaRotate.addEventListener('click', function() {
        vanilla.rotate(parseInt($(this).data('deg')));
        });
    $('.upload-result').on('click', function (ev) {
        $uploadCrop.croppie('result', {
            type: 'canvas',
            size: 'original'
        }).then(function (resp) {
            $('#imagebase64').val(resp);
            $('#form').submit();
        });
    });
});

HTML body ...

<form action="test-image.php" id="form" method="post">
<div id="upload-demo"></div>
<input type="hidden" id="imagebase64" name="imagebase64">
<a href="#" class="upload-result">Send</a>
</form>
<button class="vanilla-rotate" data-deg="-90">Rotate</button>

test-image.php ...

<?php
    if(isset($_POST['imagebase64'])){
        $data = $_POST['imagebase64'];

        list($type, $data) = explode(';', $data);
        list(, $data)      = explode(',', $data);
        $data = base64_decode($data);

        file_put_contents('image64.png', $data);
    }
?>

rotate , . , , , demoUpload, . .

+1

, . , , <a> <form> ,

var vanillaResult = document.querySelector('.vanilla-result'),
  vanillaSave = document.querySelector('.vanilla-save'),
  vanillaRotate = document.querySelector('.vanilla-rotate');

function demoVanilla() {
  var vanilla = new Croppie(document.getElementById('vanilla-demo'), {
    viewport: {
      width: 100,
      height: 100
    },
    boundary: {
      width: 300,
      height: 300
    },
    enableOrientation: true
  });
  vanilla.bind({
    url: 'http://foliotek.imtqy.com/Croppie/demo/cat.jpg',
    orientation: 1
  });
  vanillaResult.addEventListener('click', function() {
    vanilla.result('canvas').then(resultVanilla);
  });
  vanillaSave.addEventListener('click', function() {
    vanilla.result('canvas').then(saveVanilla);
  });
  vanillaRotate.addEventListener('click', function() {
    vanilla.rotate(parseInt($(this).data('deg')));
  });
}

function resultVanilla(result) {
  swal({
    title: '',
    html: true,
    text: '<img src="' + result + '" />',
    allowOutsideClick: true
  });
}

function saveVanilla(result) {
  swal({
    title: '',
    html: true,
    text: '<a id="save" href="' + result + '" download="result"><img src="' + result + '" /><br><button>Download</button></a>',
    showConfirmButton: false,
    showCancelButton: true,
    allowOutsideClick: true,

  });
}

demoVanilla();
body {
  min-width: 360px;
}
.actions {
  width: 300px;
  margin: 0 auto;
}
<!DOCTYPE html>
<html>

<head>
  <title>Demo Croppie</title>
  <link rel="Stylesheet" type="text/css" href="http://foliotek.imtqy.com/Croppie/croppie.css" />
  <link rel="Stylesheet" type="text/css" href="http://t4t5.imtqy.com/sweetalert/dist/sweetalert.css" />

</head>

<body>

  <div id="vanilla-demo"></div>

  <div class="actions">
    <button class="vanilla-result">Result</button>
    <button class="vanilla-save">Save</button>
    <button class="vanilla-rotate" data-deg="-90">Rotate Left</button>
    <button class="vanilla-rotate" data-deg="90">Rotate Right</button>
  </div>


  <div id="result"></div>

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script src="http://foliotek.imtqy.com/Croppie/croppie.js"></script>
  <script src="http://t4t5.imtqy.com/sweetalert/dist/sweetalert-dev.js"></script>
</body>

</html>
+2

All Articles