Binary jpg data tonen als image
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)
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
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.';
}
?>
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.
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.
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)
1
2
3
4
5
6
7
8
9
10
11
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.';
}
?>
$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.';
}
?>
index.html:
Code (php)
1
2
3
4
5
6
7
8
9
10
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>
<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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
?>
$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:
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 ;)