obsługa aparatu

Odpowiedz Nowy wątek
2019-05-13 20:53
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ę.

edytowany 1x, ostatnio: marnit, 2019-05-13 20:54

Pozostało 580 znaków

2019-05-13 21:13
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.


edytowany 2x, ostatnio: Patryk27, 2019-05-13 21:14

Pozostało 580 znaków

2019-05-13 21:15
0

musisz to napisać w js a nie w php

Pozostało 580 znaków

2019-05-14 10:55
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
}

Pozostało 580 znaków

2019-05-14 12:18
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[...]ebRTC_API/Taking_still_photos

a może chodzi o php uruchomione w telefonie? ;) - Miang 2019-05-18 21:13

Pozostało 580 znaków

2019-05-18 18:54
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);

?>

Pozostało 580 znaków

2019-05-18 19:50
0

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


Pozostało 580 znaków

2019-05-18 20:06
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.

Pozostało 580 znaków

2019-05-18 22:38
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

Pozostało 580 znaków

2019-05-19 21:37
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.

albo i niekoniecznie, teraz wydaje mi się, że wcześniej wykonuje się wysłanie na serwer a dopiero potem jest dodawania klasa taken i obraz zapisywany w postaci zakodowanej, tylko, że to już się nie robi ponieważ wcześniej wywaliło błędy z php.. Jak mogę to obejść, nie tworząc kolejnego buttona? - marnit 2019-05-19 23:21

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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