Binary jpg data tonen als image

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koert Wiltenburg

Koert Wiltenburg

08/01/2016 23:56:23
Quote Anchor link
Ik wil op mijn website een image tonen wat mijn webcam op dat moment ziet. Zonder mijn webcam te publiceren naar het internet.
Dat kan met het commando
http://192.168.59.6:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=Username&pwd=Password

Dat werkt, ik krijg een berg gibberish terug. Nu dit nog omzetten naar een plaatje. En daar begin ik ondertussen licht gefrustreerd door te raken.
Heeft iemand enig idee wat ik fout doe?

Ik gebruik de volgende code:
Quote:
<H1>Configuring the webcam to my custom settings</H1>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    function SetCamOption($Description,$Command){
        Echo "$Description...";
        Echo file_get_contents($GLOBALS['CamAddress'] . $Command . $GLOBALS['SVC_Account']);
        Echo "<br/>";
    }


    $CamAddress="http://192.168.59.6:88/cgi-bin/CGIProxy.fcgi?";
    $SVC_Account="&usr=UserName&pwd=*********";
    
    SetCamOption("Set Infrared to manual...","cmd=setInfraLedConfig&mode=1");
    SetCamOption("Disabling infrared...","cmd=closeInfraLed");
    SetCamOption("Flip video...","cmd=flipVideo&isFlip=1");
    SetCamOption("Mirror video...","cmd=mirrorVideo&isMirror=1");
    #SetCamOption("Set PresetPoint TimeLapse...","cmd=ptzAddPresetPoint&name=TimeLapse");
    SetCamOption("Goto PresetPoint TimeLapse...","cmd=ptzGotoPresetPoint&name=TimeLapse");

    
    $data = file_get_contents($GLOBALS['CamAddress'] . "cmd=snapPicture2" . $GLOBALS['SVC_Account']);
    $im = imagecreatefromstring($data);
    if ($im !== false) {
        header('Content-Type: image/jpg');
        imagejpeg($im);
#        imagedestroy($im);
    }
    else {
        echo 'imagecreatefromstring error.';
    }

?>


De bedoeling is om er later een timelapse door te laten maken, maar ik kan de infrarood lampjes alleen uitschakelen via deze oplossing. En van het een kwam het ander... #DanDoeIkHetWelHelemaalZelf! ;)

De pagina is op te vragen via http://www.koert.info/SetWebcam.php Mocht dat relevant zijn.
 
PHP hulp

PHP hulp

14/01/2025 12:20:45
 
Thomas van den Heuvel

Thomas van den Heuvel

09/01/2016 01:29:29
Quote Anchor link
Je produceert allemaal rotzooi (output) door die SetCamOption functie voordat je een plaatje wilt produceren... dat gaat niet werken he. Probeer het eens door die setcamoption zut achterwege te laten.
 
Koert Wiltenburg

Koert Wiltenburg

09/01/2016 12:03:42
Quote Anchor link
Dat is inderdaad de oplossing. Zonder die andere meuk werkt het inderdaad. thanks!!!
Dat wordt dan ook geïnterpreteerd als onderdeel van de image door de header statement vermoed ik?

Nou zal ik de laatste zijn om te ontkennen dat ik koppig ben. Ik wil een plaatje op een website tonen in plaats van een hele pagina alleen voor dit beeld. Maar ik heb weer wat geleerd en heb weer iets om op verder te bouwen.

Ik vermoed dat ik nu verder moet in HTML met de "data:" vlag in de img tag op de website. Ga ik mee verder na dit weekend.

Nogmaals bedankt voor het snelle antwoord!

Ter info ende vermaeck; de code is nu slechts
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$data
= file_get_contents("http://192.168.59.6:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=*******&pwd=********");
    $im = imagecreatefromstring($data);
    if ($im !== false) {
        header('Content-Type: image/jpg');
        imagejpeg($im);
    }

    else {
        echo 'imagecreatefromstring error.';
    }

?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/01/2016 12:50:51
Quote Anchor link
Om hetgeen te bereiken wat je wilt maak je naast je huidige script een HTML pagina. stel dat je het script dat je nu hebt campic.php hebt genoemd. Je maakt dan de volgende html pagina:

index.html:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
    <head>
        <title>Mijn webcam</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <img src="campic.php" alt="webcam" width="150" height="150">
    </body>
</html>


Verklaring:

Je campic.php maakt on the fly de binary data van een afbeelding. Dit is dezelfde data die je ziet in een jpg bestand dat op je pc is opgeslagen.

De HTML pagina is HTML (DUHHH) en daar kan je webbrowser iets mee. Als de browser de HTML leest dan ziet hij dat er een foto geladen moet worden. hij doet een tweede request naar je webserver en roept dan campic.php aan en verwacht geldige binary data terug waarmee hij een foto kan weergeven.

Toevoeging op 09/01/2016 13:12:20:

Die echo in je code heeft geen enkele zin. Die maakt namelijk nog steeds dat je data geen geldige jpeg-data wordt.
Je kunt beter in geval dat er een fout optreedt een 400 status teruggeven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$data
= file_get_contents("http://192.168.59.6:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=*******&pwd=********");
if($data !== FALSE)
{

    $im = imagecreatefromstring($data);
    if($im !== FALSE) {
        header('Content-Type: image/jpg');
        imagejpeg($im);
    exit; // stop dit script!
    }
}


header('HTTP/1.1 400 Bad Request', true, 400);
?>


Toevoeging op 09/01/2016 13:15:18:

Waarschijnlijk heb je ook de hele gd library niet nodig maar dat zou je even moeten testen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$data
= file_get_contents("http://192.168.59.6:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=*******&pwd=********");
if($data !== FALSE)
{

    header('Content-Type: image/jpg');
    echo $data;
    exit; // stop dit script!
}

header('HTTP/1.1 400 Bad Request', true, 400);
?>
 
Koert Wiltenburg

Koert Wiltenburg

09/01/2016 13:48:42
Quote Anchor link
Nuttige info. Thanks!
Ik sta nu op het punt om de deur uit te gaan, maar hiermee ga ik zeker aan de slag als ik weer terug ben :)

Die echo is inderdaad nog een overblijfsel uit de tijd dat ik nog dacht dat ik aan een losse image op de HTML pagina aan het prutsen was. Ik moet even opnieuw gaan denken over hoe ik alles in elkaar ga schuiven.
Je suggestie lijkt me inderdaad de meest praktische. :)

Fijn en constructief forum.
#HadIkEerderMoetenDoen ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.