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ę.
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.
musisz to napisać w js a nie w php
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
}
@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
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);
?>
W JSie zapisujesz dane jako image/webp
, podczas gdy w PHPie masz na sztywno .png
- skąd ta różnica?
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.
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
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.