Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Wyświetlanie obrazu ze źródła w grayscale
Forum PHP.pl > Forum > Przedszkole
djgreen
Witam. Posiadam kamerę ip w sieci lokalnej z której jest dostęp do strumienia video i klatek obrazu, strumień video został umieszczony na stronie WWW. Niestety mam problem ponieważ kamera jest kolorowa, a design strony jest czarno biały i taki ma zostać, więc chciałbym aby video z kamery i obrazy z niej także były w grayscale. Ze strumieniem może być problem ponieważ jest realizowany przez kontrolkę activeX i już się z tym pogodziłem, jednakże może pojedyńcze klatki obrazu da się uzyskać w odcieniach szarości. adres do pojedyńczej klatki to: http://adres.pl:port/image.jpg

Zanalazłem gotowy skrypt w PHP który zmienia obraz kolorowy w grayscale, jednakże gdy zamiast nazwy pliku wpisuję ścieżkę dostępu do obrazu z kamery obraz się nie wyświetla:

Kod
<?php </P> <P>$file = 'http://adres.pl:port/image.jpg';<BR>$newfile = 'image.jpg';</P> <P>copy($file, $newfile);</P> <P><BR>$source_file = "image.jpg";</P> <P>$im = ImageCreateFromJpeg($source_file); </P> <P>$imgw = imagesx($im);<BR>$imgh = imagesy($im);</P> <P>for ($i=0; $i<$imgw; $i++)<BR>{<BR>        for ($j=0; $j<$imgh; $j++)<BR>        {<BR>        <BR>                // get the rgb value for current pixel<BR>                <BR>                $rgb = ImageColorAt($im, $i, $j); <BR>                <BR>                // extract each value for r, g, b<BR>                <BR>                $rr = ($rgb >> 16) & 0xFF;<BR>                $gg = ($rgb >> 8) & 0xFF;<BR>                $bb = $rgb & 0xFF;<BR>                <BR>                // get the Value from the RGB value<BR>                <BR>                $g = round(($rr + $gg + $bb) / 3);<BR>                <BR>                // grayscale values have r=g=b=g<BR>                <BR>                $val = imagecolorallocate($im, $g, $g, $g);<BR>                <BR>                // set the gray value<BR>                <BR>                imagesetpixel ($im, $i, $j, $val);<BR>        }<BR>}</P> <P>header('Content-type: image/jpeg');<BR>imagejpeg($im);<BR>?>


pomyślałem także, że może by pierw zapisać obraz z adresu na serwer www za pomocą poniższego skryptu, a później skorzystać z powyższego skryptu

Kod
<?php<BR>$file = 'http://adres.pl:port/image.jpg';<BR>$newfile = 'image.jpg';</P> <P>copy($file, $newfile);</P> <P>// Save the image as 'image.jpg'<BR>imagejpeg($file, 'image.jpg');</P> <P>// Free up memory<BR>imagedestroy($file);<BR>?>


Jednakże pliku także nie zapisuje. Zaznaczam, że nie jest to problem uprawnień zapisu na serwerze. Proszę o pomoc.
erix
Szczerze mówiąc, to ten skrypt jest wynalezieniem koła na nowo; wystarczy imagefilter" title="Zobacz w manualu PHP" target="_manual z flagą IMG_FILTER_GRAYSCALE i nie trzeba pisać takich tasiemców. ;p

Poza tym, wstaw kod w odpowiednie bbcode.
djgreen
Niestety nie jestem biegły w PHP jak zauważyłeś, a imagefilter próbowałem i mi nie działał, ale wydaje mi się, że to nie jest rozwiązanie mojego problemu, tak jak napisałem na wstępie nie pobiera mi obrazu źródłowego ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.