Postingan lainnya
Upload Foto Webcam ke Database
Saya sedang membuat aplikasi dengan salah satu fiturnya upload foto selfi. Semua fungsi berjalan, data sudah masuk database dan foto juga sudah masuk ke foldernya. Kendala nya cuma 1, yaitu foto/gambar tidak bisa dibuka. Ukuran filenya pun 0 kb. Mohon pencerahannya teman2. Terima kasih. Berikut sy sertakan kode saya.
Fungsi upload
$image = $this->input->post('image');
$image = str_replace('data:image/jpeg;base64,', '', $image);
$image = str_replace(' ', '+', $image);
$imaged = base64_decode($image);
$filename = 'image_'.time().'.png';
file_put_contents(FCPATH.'/assets_seller/img/ktp-selfi/'.$filename,$imaged);
$data = array(
'user_selfi' => $filename,
);
$res = $this->Seller_model->insert_selp($data);
echo json_encode($res);
Fungsi take foto dari webcam
<script src="https://cdnjs.cloudflare.com/ajax/libs/webcamjs/1.0.25/webcam.js"></script>
<script language="JavaScript">
Webcam.set({
width: 320,
height: 240,
image_format: 'jpeg',
jpeg_quality: 90
});
Webcam.attach( '#my_camera' );
</script>
<!-- Code to handle taking the snapshot and displaying it locally -->
<script type="text/javascript">
$('#register').on('submit', function (event) {
event.preventDefault();
var image = '';
Webcam.snap( function(data_uri) {
image = data_uri;
});
$.ajax({
url: 'seller/selfi_save',
// url: '<?php echo site_url("seller/selfi_save");?>',
type: 'POST',
dataType: 'json',
data: {image:image},
})
.done(function(data) {
if (data > 0) {
alert('Upload selfi berhasil');
$('#register')[0].reset();
}
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
</script>
Form nya
<form id="register">
<div class="row">
<div class="col-md-6 col-lg-12">
<div class="form-group">
<label>Foto Selfi</label>
<div id="my_camera"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 col-lg-12">
<img class="img-fluid" width="300" src="assets_seller/img/ktp-selfi/<?php echo $me['user_selfi']; ?>" alt="<?php echo $me['user_selfi']; ?>">
</div>
</div>
<div class="form-group mt-5">
<button type="submit" class="btn btn-primary btn-sm">Simpan</button>
<button type="button" onclick="goBack()" class="btn btn-warning btn-sm">Kembali</button>
</div>
</form>
3 Jawaban:
<div>Coba ekstension yang ada divariabel $filename diubah dari ".png" menjadi ".jpeg". Karena data yang dikirimkan dari javascript itu berupa image yang diencode ke string base64 itu formatnya .jpeg, dari script kamu sendiri pada bagian ini :</div><pre>$image = str_replace('data:image/jpeg;base64,', '', $image);</pre><div>itu sudah menandakan bahwa formatnya adalah image/jpeg, bukan image/png. Sepengalamanku, memang tidak bisa di convert dari jpeg ke png atau sebaliknya. Jadi kalo dari javascriptnya itu image/jpeg ya dari php-nya juga harus jpeg, begitupun juga untuk format yang .png<br>Semoga berhasil.</div>
Tanggapan
Makasih bang jawabannya, sy sudah ganti dan masih sama. Belum berhasil.
<div>Coba bagian ini dihapus :</div><pre>$image = str_replace(' ', '+', $image);</pre>
Jawaban Terpilih
<div>Tadi saya sempet test dari sample webcam.js nya, struktur projectnya seperti ini :</div><pre>. ├── index.php ├── upload.php └── uploads <-- Directory utk menyimpan file yang akan diupload</pre><div><br>index.php (sumber: <a href="https://pixlcore.com/demos/webcamjs/demos/basic.html">https://pixlcore.com/demos/webcamjs/demos/basic.html</a>) dengan beberapa tambahan script untuk upload via jquery ajax :</div><pre> <!doctype html>
<html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>WebcamJS Test Page</title> <style type="text/css"> body { font-family: Helvetica, sans-serif; } h2, h3 { margin-top:0; } form { margin-top: 15px; } form > input { margin-right: 15px; } #results { float:right; margin:20px; padding:20px; border:1px solid; background:#ccc; } input[type=button], button{ padding: 8px 12px; font-weight: bold; border: 2px solid #bbb; } </style> </head> <body> <div id="results">Your captured image will appear here...</div>
&lt;h1&gt;WebcamJS Test Page&lt;/h1&gt;
&lt;h3&gt;Demonstrates simple 320x240 capture &amp;amp; display&lt;/h3&gt;
&lt;div id="my_camera"&gt;&lt;/div&gt;
&lt;!-- First, include the Webcam.js JavaScript Library --&gt;
&lt;script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/webcamjs/1.0.25/webcam.js"&gt;&lt;/script&gt;
&lt;!-- Configure a few settings and attach camera --&gt;
&lt;script language="JavaScript"&gt;
Webcam.set({
width: 640,
height: 480,
image_format: 'jpeg',
//jpeg_quality: 90
});
Webcam.attach( '#my_camera' );
&lt;/script&gt;
&lt;!-- A button for taking snaps --&gt;
&lt;form&gt;
&lt;input type=button value="Take Snapshot" onClick="take_snapshot()"&gt;
&lt;button type="button" onClick="uploadTakenPicture()" name="upload-image"&gt;Upload Picture&lt;/button&gt;
&lt;/form&gt;
&lt;!-- jquery --&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"&gt;&lt;/script&gt;
&lt;!-- Code to handle taking the snapshot and displaying it locally --&gt;
&lt;script language="JavaScript"&gt;
let images = null;
function take_snapshot() {
// take snapshot and get image data
Webcam.snap( function(data_uri) {
images = data_uri;
// display results in page
document.getElementById('results').innerHTML =
'&lt;h2&gt;Here is your image:&lt;/h2&gt;' +
'&lt;img src="'+data_uri+'"/&gt;';
} );
}
function uploadTakenPicture() {
if(images !== null) {
$.ajax({
url: 'upload.php',
method: 'POST',
data: {
'base64img': images
},
success: function(res){
let response = JSON.parse(res);
if(response.status === 'success') {
alert("Uploaded successfully!");
} else {
alert(response.message);
}
},
})
} else {
alert("Please take picture first!");
}
}
&lt;/script&gt;
</body> </html></pre><div><br>upload.php</div><pre><?php
if(isset($_POST['base64img'])) { $base64img = $_POST['base64img']; $base64img = str_replace("data:image/jpeg;base64,", "", $base64img); $imageDecoded = base64_decode($base64img); $path = 'uploads/'; $filename = time() . '.jpeg';
try{
file_put_contents($path . $filename, $imageDecoded);
$response = [
'status' =&gt; 'success',
];
} catch(\Exception $e) {
$response = [
'status' =&gt; 'error',
'message' =&gt; $e-&gt;getMessage()
];
}
echo json_encode($response);
}</pre><div><br>Saya coba seperti itu bekerja normal. mungkin bisa dijadikan sampel dan tinggal dikonversikan ke style codeigniter saja. Semoga berhasil.</div>
Tanggapan
Sudah sy coba mas, berhasil. Terima kasih