API Appareil Photo
Bonsoir a tous
Je sollicite votre aide car après plusieurs heure de recherche je ne trouve aucune documentation sur mon projet de GoogleSheet.
Je souhaiterais depuis une tablette et une feuille Sheet en ligne pouvoir lancer a partir d'un bouton (clic) une photo qui s'intégrer dans un groupe de cellule.
Je ne troupe vraiment rien sur une API existante ou même un code permettant d'appeler la camera de la "device" exécutant la page.
J'en suis a tel point que je me demande tout simplement si c'est possible
Merci par avance de votre aide ou de vos pistes éventuelles
R
Bonjour,
C'est intéressant comme projet, voici une idée de déroulé :
1- lancer l'appareil photo et stocker la photo dans google drive (pour cela il faut interagir avec l'api de google chrome, google apps script n'interagissant pas avec les périphériques)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Camera Capture and Save to Google Drive</title>
</head>
<body>
<script src="https://apis.google.com/js/api.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
// Vérifie si l'API MediaDevices est supportée par le navigateur
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
// Demande à l'utilisateur l'autorisation d'accéder à la caméra
navigator.mediaDevices.getUserMedia({ video: true })
.then(function (stream) {
// Affiche le flux vidéo dans un élément video
var video = document.createElement('video');
document.body.appendChild(video);
video.srcObject = stream;
video.play();
// Ajoute un bouton pour prendre la photo et la sauvegarder sur Google Drive
var captureButton = document.createElement('button');
captureButton.textContent = 'Prendre une photo et sauvegarder sur Google Drive';
document.body.appendChild(captureButton);
// Lorsque le bouton est cliqué, capture une image du flux vidéo et enregistre sur Google Drive
captureButton.addEventListener('click', function () {
var canvas = document.createElement('canvas');
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
// Convertit l'image en base64
var imageData = canvas.toDataURL('image/png');
// Enregistre l'image sur Google Drive
saveToDrive(imageData);
// Arrête le flux vidéo et libère la ressource
stream.getTracks().forEach(function (track) {
track.stop();
});
});
})
.catch(function (error) {
console.error('Erreur lors de l\'accès à la caméra : ', error);
});
} else {
console.error('L\'API MediaDevices n\'est pas supportée par ce navigateur.');
}
});
function saveToDrive(imageData) {
// Remplacez ces valeurs par celles de votre propre projet
var clientId = 'YOUR_CLIENT_ID';
var apiKey = 'YOUR_API_KEY';
var scope = 'https://www.googleapis.com/auth/drive.file';
// Initialise l'API Google Drive
gapi.client.init({
apiKey: apiKey,
clientId: clientId,
discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest'],
scope: scope
}).then(function () {
// Crée un fichier dans Google Drive
gapi.client.drive.files.create({
resource: {
name: 'CapturedImageTemp.png', // Nom du fichier à créer
mimeType: 'image/png' // Type MIME de l'image
},
media: {
mimeType: 'image/png',
body: imageData.split(',')[1] // Données base64 de l'image
}
}).then(function (response) {
console.log('Image enregistrée sur Google Drive :', response.result);
}).catch(function (error) {
console.error('Erreur lors de l\'enregistrement sur Google Drive : ', error);
});
});
}
</script>
</body>
</html>2- ensuite c'est tout simple, il faut juste récupérer dans le dossier drive la photo CapturedImageTemp.png et l'inserer dans une cellule sheet, puis, supprimer la photo du Drive.
function insertImageInCell(imageURL, sheetName, cellAddress) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName(sheetName);
// Obtenez la cellule spécifiée
var cell = sheet.getRange(cellAddress);
// Efface le contenu de la cellule
cell.clearContent();
// Insérez l'image dans la cellule
var image = UrlFetchApp.fetch(imageURL);
sheet.insertImage(image, cell.getColumn(), cell.getRow());
}Attention, ces scripts ne sont que des ébauches, ce n'est pas fonctionnel en l'état, juste une piste pour atteindre votre objectif.
Bonjour,
Merci beaucoup pour votre retour !
Je vais essayer de mettre ça en place malgré mes maigres connaissances ennemis dev....
J'essai de faire un retour dans le week-end avec un fichier test
Merci encore
RA