obsługa aparatu

0

Cześć,
Potrzebuję napisać aplikację w php, która po kliknięciu w przycisk uruchomi aparat w telefonie i zrobi zdjęcie. Prośba o pomoc w naprowadzeniu mnie jak się za to zabrać, czego szukać? Z góry dziękuję.

1

Typowa aplikacja napisana w PHP sama z siebie nie zrobi zdjęcia - PHP działa po stronie serwera, który nie ma dostępu do urządzeń peryferyjnych klienta.

0

musisz to napisać w js a nie w php

0

Sprawdź, czy istnieje dla tej aplikacji CLI (Command Line Interface). Jeśli tak, to zastosuj funkcję exec.

<form method="get" action="">
  <input type="submit" value="Launch" name="submit" />
</form>
if(isset($_GET['submit'])) {
  exec('calc.exe'); // if environment variable is set probably
}
2

@Neutral: ale jaki to ma sens skoro php chodzi na serwerze a fotke robisz o clienta? O.o

rozwiązanie jest tutaj https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Taking_still_photos

0

Mam problem z zapisaniem zdjęcia na serwerze, co prawda w katalogu upload tworzy mi się plik .png jednak nie da się go odtworzyć. Pojawia się błąd: "Can't read file header! Unknown file format, empty/damaged file or file not found!"

Niżej załączam kod. Gorąca prośba o pomoc.


<!doctype html>
    <html lang="pl">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="x-ua-compatible" content="ie=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<script src="https://cdnjs.cloudflare.com/ajax/libs/webcamjs/1.0.25/webcam.min.js"></script>
		<script src="skrypt.js"></script>

		<title>Camera App</title>
		<link rel="stylesheet" href="style.css"> 
	</head>
	
	<body>
    <form method="POST" action="storeImage.php">
                  <!-- Camera -->
                <main id="camera">
                    <!-- Camera sensor -->
                    <canvas id="camera--sensor"></canvas>
                    <!-- Camera view -->
                    <video id="camera--view" autoplay playsinline></video>
                    <!-- Camera output -->
                    
            
                    <img src="//:0" alt="" id="camera--output" name="image">
                    <!-- Camera trigger -->
                    <button id="camera--trigger" >Take a picture</button>
                
                </main>
        </form>
		<!-- Reference to your JavaScript file -->
        <script src="app.js"></script>

	</body>
</html>


Skrypt:


// Set constraints for the video stream
var constraints = { video: { facingMode: "user" }, audio: false };
// Define constants
const cameraView = document.querySelector("#camera--view"),
    cameraOutput = document.querySelector("#camera--output"),
    cameraSensor = document.querySelector("#camera--sensor"),
    cameraTrigger = document.querySelector("#camera--trigger")
// Access the device camera and stream to cameraView
function cameraStart() {
    navigator.mediaDevices
        .getUserMedia(constraints)
        .then(function(stream) {
        track = stream.getTracks()[0];
        cameraView.srcObject = stream;
    })
    .catch(function(error) {
        console.error("Oops. Something is broken.", error);
    });
}
// Take a picture when cameraTrigger is tapped
cameraTrigger.onclick = function() {
    cameraSensor.width = cameraView.videoWidth;
    cameraSensor.height = cameraView.videoHeight;
    cameraSensor.getContext("2d").drawImage(cameraView, 0, 0);
    cameraOutput.src = cameraSensor.toDataURL("image/webp");
    cameraOutput.classList.add("taken");
};
// Start the video stream when the window loads
window.addEventListener("load", cameraStart, false);

Upload zdjęcia na serwer

<?php
    
    $img = $_POST['image'];
    $folderPath = "upload/";
  
    $image_parts = explode(";base64,", $img);
    $image_type_aux = explode("image/", $image_parts[0]);
    $image_type = $image_type_aux[1];
  
    $image_base64 = base64_decode($image_parts[1]);
    $fileName = uniqid() . '.png';
  
    $file = $folderPath . $fileName;
    file_put_contents($file, $image_base64);
  
    print_r($fileName);
  
?>
0

W JSie zapisujesz dane jako image/webp, podczas gdy w PHPie masz na sztywno .png - skąd ta różnica?

0
Patryk27 napisał(a):

W JSie zapisujesz dane jako image/webp, podczas gdy w PHPie masz na sztywno .png - skąd ta różnica?

Zmieniłem w JSie na:

cameraOutput.src = cameraSensor.toDataURL('image/png');

ale niestety nadal się nie da odtworzyć pliku. Pojawia się ten sam błąd.

0

Po kliknięciu "Take a picture" pojawiają mi się takie błędy. Nie mam pomysłu gdzie szukać błędu, za każdym razem tworzy się plik png ale nie da się go odtworzyć, ma 0 B

screenshot-20190518223413.png

0

Wydaje mi się, że wiem gdzie mam błąd, ale nie wiem jak to naprawić.
Po kliknięciu w przycisk Take a picture zdjęcie jest zapisywane w formie zakodowanej.

Przed kliknięciem Take a picture

 <img src="//:0" alt="" id="camera--output">

Po kliknięciu Take a picture jest zastępowane:

 <img id="camera--output" class="taken" src="data:image/png;base64,....." alt="">

Jednak później nie jest dekodowane i dlatego pojawiają się te błędy oraz plik, który zapisuje się na serwerze jest uszkodzony i nie można go odtworzyć.
Jednak nie za bardzo wiem jak to naprawić. Siedzie nad tym już, któryś dzień z kolei.. :(
Dobrze myślę? Serdeczna prośba o pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1