裁剪图像并使用jQuery fileupload上传

时间:2016-11-03 21:37:14

标签: jquery file jquery-file-upload

我使用JQuery File Upload con UploadHandler,这个: https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php 我使用fileupload很好地上传图像,但现在我需要在上传之前修改它们。我使用croppie.js: http://foliotek.github.io/Croppie/ 我正在修改' fileuploadadd'方法就这样:

.bind('fileuploadadd', function (e, data) {
    $(e.target).fileupload('option', 'url', uploads_base_url + '?f=' + $(e.target).attr('folder'));
                var acceptFileTypes = /(\.|\/)(gif|jpe?g|png)$/i;
                if ($(e.target).attr('data-accept_file_types') != '' && '' + $(e.target).attr('data-accept_file_types') != 'undefined')
                    acceptFileTypes = new RegExp($(e.target).attr('data-accept_file_types'), 'i');
                if (data.originalFiles[0]['name']) {
                    var fileExt = '.' + data.originalFiles[0]['name'].split('.').pop();
                    if (!acceptFileTypes.test(fileExt)) {
                        alert('Formato non ammesso');
                        return false;
                    } else {
                        data.context = $("<div id='cropper'></div>").croppie({
                            viewport: {
                                width: 300,
                                height: 300,
                                type: 'circle'
                            }
                        })
                                .insertAfter("#dragArea");
                        var reader = new FileReader();
                        reader.readAsDataURL(data.files[0]);
                        reader.onload = function (e) {
                            data.context.croppie('bind', {
                                url: e.target.result
                            });
                        };
                        $("<div><button>Taglia</button></div>").insertAfter("#cropper")
                                .click(function () {
                                    $("#cropper").croppie('result', {format: 'jpeg'}).then(function (resp) {
                                        var blob = new Blob([window.atob(resp.split(",")[1])],{type:"image/jpeg"});
                                        data.files[0] = new File([blob], data.originalFiles[0]['name'].split(".")[0]+".jpeg");
                                        data.originalFiles[0] = data.files[0];
                                        data.submit();
                                        $("#cropper").remove();
                                        $(this).remove();
                                    });
                                });
                    }
                }
                //fixFileuploadValue(e.target, data.files[0].name);
            });

单击剪切按钮,文件被上传,但它的编码方式与fileupload文件不同。如何以与裁剪图像相同的方式下载?

2 个答案:

答案 0 :(得分:1)

您无需创建新的blob文件。只需添加类型选项: blob 。像这样:

$("#cropper").croppie('result', {format: 'jpeg', type: 'blob'}).then(function (resp) {                                        
                                    data.files[0] = new File([resp], data.originalFiles[0]['name'].split(".")[0]+".jpeg");
                                    data.originalFiles[0] = data.files[0];
                                    data.submit();
                                    $("#cropper").remove();
                                    $(this).remove();
                                });

答案 1 :(得分:0)

@Estevex

在这种情况下,我们最终使用了没有jQuery文件上传的cropper.js。下面的代码:

/* SCRIPTS TO HANDLE THE CROPPER BOX */
var $image = $("#image");
var cropBoxData;
var canvasData;
$("#modalCrop").on("shown.bs.modal", function () {
  $image.cropper({
    viewMode: 1,
    aspectRatio: 1/1,
    minCropBoxWidth: 200,
    minCropBoxHeight: 200,
    ready: function () {
      $image.cropper("setCanvasData", canvasData);
      $image.cropper("setCropBoxData", cropBoxData);
    }
  });
}).on("hidden.bs.modal", function () {
  cropBoxData = $image.cropper("getCropBoxData");
  canvasData = $image.cropper("getCanvasData");
  $image.cropper("destroy");
});

// Enable zoom in button
$(".js-zoom-in").click(function () {
  $image.cropper("zoom", 0.1);
});

// Enable zoom out button
$(".js-zoom-out").click(function () {
  $image.cropper("zoom", -0.1);
});

/* SCRIPT TO COLLECT THE DATA AND POST TO THE SERVER */
$(".js-crop-and-upload").click(function () {
  var cropData = $image.cropper("getData");
  $("#id_avatar-form-x").val(cropData["x"]);
  $("#id_avatar-form-y").val(cropData["y"]);
  $("#id_avatar-form-height").val(cropData["height"]);
  $("#id_avatar-form-width").val(cropData["width"]);
  $("#formUploadAvatar").submit();
});

</script>

祝您好运,如果您使用jQuery fileupload取得了成功,请不要忘记将一些东西还给社区:)