2017-11-06 5 views
1

Ich verwende Cropper 3.1.3 und DropzoneJS 5.2.0, zwei beliebte JavaScript-Bibliothek zum Zuschneiden von Bildern und Drop/Upload von Bildern.DropzoneJs: Erstellen Sie ein Vorschaubild nach dem Zuschneiden Bild mit CropperJS

Ich werde viel Code weglassen, der die Benutzeroberfläche umgibt. An einem bestimmten Punkt wähle ich einen Schnittbereich und drücke einen "Crop" Knopf. Die Taste führt:

$image.cropper(
       'getCroppedCanvas', 
       {fillColor: '#fff'} 
      ) 
       .toBlob(function (blob) { 
         var croppedFile = blob; 
         croppedFile.lastModifiedDate = new Date(); 
         croppedFile.name = fileName; 
         croppedFile.accepted = true; 
         var files = myDropzone.getAcceptedFiles(); 
         for (var i = 0; i < files.length; i++) { 
          var file = files[i]; 
          if (file.name === fileName) { 
           myDropzone.removeFile(file); 
          } 
         } 

         myDropzone.files.push(croppedFile); 
         myDropzone.emit('addedfile', croppedFile); 
         $cropperModal.modal('hide'); 
        }); 

Daraus ich erwartet, dass der Blob (Datei) an die Dropzone gesendet wird und hinzugefügt und am Ende das Miniaturbild erstellt wird. Aber das passiert nicht. Also, wie kann ich die Erstellung der Miniaturansicht mit DropzoneJS erzwingen?

Ich habe eine komplette JSFiddle here, um das Problem zu reproduzieren.

Antwort

1

Es kann ein Problem mit der Version von Dropzone sein Sie verwenden https://gitlab.com/meno/dropzone/issues/56

Sie können für addedfile durch Modifizieren der Event-Handler um ihn herum arbeiten, um eine objectURL für die Vorschau zu generieren:

myDropzone.on('addedfile', function(file) { 
    if (!cropped) { 
    myDropzone.removeFile(file); 
    cropper(file); 
    } else { 
    cropped = false; 
    var previewURL = URL.createObjectURL(file); 
    var dzPreview = $(file.previewElement).find('img'); 
    dzPreview.attr("src", previewURL); 
    } 
}); 

JSFiddle: https://jsfiddle.net/m02t97fa/

+0

Der Vollständigkeit halber sollte ich hinzufügen, dass mein Snippet nur funktioniert, weil in '$ image.cropper ('getCroppedCanvas', {...' es 'cropped = true') und die beschnittene Version des i Magier wird dann über 'myDropzone.emit ('addedfile', croppedFile) 'zu DropZone hinzugefügt;'. Dies löst den 'addedfile'-Event-Handler erneut aus, indem die abgeschnittene Version verwendet wird. –

+0

Hallo, danke für die Antwort. Wenn Sie also das "sonst", wie Sie vorgeschlagen haben, ändern, scheint das Problem behoben zu sein. Danke vielmals. Ich werde mehr Tests machen und für den Fall, dass das Kopfgeld vergeben wird. – JeanValjean

Verwandte Themen