File input control in form:
Button onclick event:
Javascript function :
PHP Controller script:
<div class="row">
<img id="preview" width="200px" class="hidden"/>
<?php echo CHtml::label("File Foto", 'file_image'); ?>
<?php echo CHtml::fileField("file_image", '', array('accept' => '.jpg')); ?>
<br/>
<?php
echo CHtml::button("Upload Foto", array(
'id' => 'btn-upload'
));
?>
</div>
Button onclick event:
Yii::app()->clientScript->registerScript('upload', "
$('#btn-upload').click(function(){
resizeImage();
});
");
Javascript function :
<script> function upload(dataurl) { var formData = new FormData($("#tbl-hdrclaimrusak-form")[0]); formData.append("image_compress", dataurl); formData.delete("file_image"); $.ajax({ url: '<?php echo Yii::app()->createUrl("someController/ajaxupload"); ?>', type: 'POST', data: formData, datatype: 'json', success: function (data) { var json = $.parseJSON(data); if (json.message) { $("#div-message").removeClass("hidden"); $("#div-message").html(json.message); } else { $("#div-message").addClass("hidden"); $.fn.yiiGridView.update('foto_grid', { data: $(this).serialize() }) } }, cache: false, contentType: false, processData: false }); } function resizeInCanvas(img) { var preferedWidth = 1024; if (img.width < img.height) { preferedWidth = 768; } var ratio = preferedWidth / img.width; var canvas = document.createElement("canvas"); canvas.width = img.width * ratio; canvas.height = img.height * ratio; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); return canvas.toDataURL("image/jpeg"); } function resizeImage() { Loading.show(); var input = document.getElementById("file_image"); if (input.files && input.files[0]) { var reader = new FileReader(); reader.onload = function (e) { var img = new Image(); img.src = e.target.result; var dataurl = resizeInCanvas(img); upload(dataurl); } reader.readAsDataURL(input.files[0]); } } </script>
PHP Controller script:
public function actionAjaxupload() {
if (isset($_POST['image_compress'])) {
$compressed = $_POST['image_compress'];
$compressed = str_replace('data:image/jpeg;base64,', '', $compressed);
$compressed = str_replace(" ", "+", $compressed);
$new_foto = base64_decode($compressed);
$filename = "compressed" . "_" . date("YmdHis") . ".jpeg";
$fullpath = Yii::app()->basePath . "/../images/somefolder/" . $filename;
$store = file_put_contents($fullpath, $new_foto);
}
echo CJSON::encode(array('message' => $message));
}
Comments
Post a Comment