Próbuję stworzyć uploader do przesyłania zdjęć z możliwością kadrowania i paskiem postępu wysyłania. Chciałbym aby to działało tak, że zdjęcie można wykadrować jeszcze po stronie klienta. Wykorzystuję do tego Croppie-master. Kod mam taki:
<button class="btn btn-success crop_image">Przytnij
</button> <div class="panel-body" align="center">
<input type="file" name="upload_image" id="upload_image" accept=".jpg, .png" />
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
<div id="targetLayer" style="display:none;"></div>
<div id="loader-icon" style="display:none;"><img src="loader.gif" /></div>
<script type="text/javascript">
$( document ).ready(function(){
$image_crop=$("#demo").croppie({
enableOrientation: true,
enableExif: true,
viewport: {
width: 200,
height:300,
type:'circl'
},
boundary:
{
width: 600,
height: 400
},
showZoomer: true,
});
$("#upload_image").on('change',function(){
var reader = new FileReader();
reader.onload = function(event){
$image_crop.croppie('bind',{
url: event.target.result
}).then(function(){
console.log("OK");
});
}
reader.readAsDataURL(this.files[0]);
});
$(".crop_image").click(function(event){
$image_crop.croppie('result',{
type: 'canvas',
size: 'viewport'
}).then(function(response){
$.ajax({
url:"kadruj.php",
type:"POST",
data:{"image":response},
success:function(data)
{
$("#wykadrowany").html(data);
//alert(data);
//$("#upload_image").value(data);
}
});
})
});
});
$("#uploadImage").submit(function(event){
if($("#upload_image").val())
{
var nameFoto=$('#upload_image').val();
$("#nameFoto").val(nameFoto);
event.preventDefault();
$("#loader-icon").show();
$("#targetLayer").hide();
$(this).ajaxSubmit({
target: "#targetLayer",
beforeSubmit:function(){
$('.progress-bar').width('0%');
},
uploadProgress: function(event, position, total, percentageComplete)
{
$(".progress-bar").animate({
width: percentageComplete + '%'
}, {
duration: 1000
});
},
success: function(){
$("#loader-icon").hide();
$("#targetLayer").show();
},
resetForm: true
});
}
return false;
});
Oryginalną nazwę zdjęcia zmieniam na time() I teraz mam problem w jaki sposób pobrać już wykadrowane zdjęcie do $_FILES. Kombinowałem coś takiego poprzez value ale to nie działa:
<input type="file" name="upload_image" id="upload_image" value="wykadrowane/1562588775.jpg" />
Chodzi o to żeby nie trzeba było już kliknąć w submit „Przeglądaj...” i wskazywać na kadrowany plik jpg tylko aby załadowało się samo zaraz po wykadrowaniu. I później tylko klik w button wyślij i plik leci na serwer. Czy to w ogóle jest realne czy może jednak trzeba najpierw wysłać plik na serwer, tam go kadrować i zapisać.