ugrás a tartalomhoz

Kép kiírás

CzP · 2017. Ápr. 19. (Sze), 17.55
Egy kezdő kér segítséget:

<?php
$img = imagecreatefromjpeg ("xxx.jpg");
header ('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
?>
Erre a Firefox azt mondja hogy hibás a kép.
Mi a hiba ?

Köszönettel
 
1

Tobbi bongeszo?

janoszen · 2017. Ápr. 20. (Cs), 06.35
Mit mond a tobbi bongeszo? Ezer oka lehet, pl az hogy a file elejen vannak lathatatan BOM karaketerek (ha Notepad-del szerkesztesz pl.) vagy a file vegen benne hagytal par sortorest.

Ajanlom figyelmedbe Hidvegi kollega irasat.
2

Köszi a finom utalást hogy a

CzP · 2017. Ápr. 20. (Cs), 12.51
Köszi a finom utalást hogy a kezdők ne ezen a fórumon kérjenek segítséget, kutakodjanak inkább a dokumentációkban.
Amúgy a python PIL modulja segítségével rajzolom meg a képet amivel gond van.
Üdv: Czp
4

Nincs ott utalás

Pepita · 2017. Ápr. 20. (Cs), 18.45
Köszi a finom utalást hogy a kezdők ne ezen a fórumon kérjenek segítséget
Én nem látok ott erre vonatkozó utalást, és azt hiszem nem egyedül gondolom úgy, hogy Janoszen az egyik legjobb fej mentor.

Kicsit bővebben:
- Ha több más böngészőnek is rossz, akkor nem böngésző bug / feature.
- Amit írt, hogy BOM meg Notepad, az az idézett php kódra vonatkozik.
- Mindenképp hasznos cikk számodra, amit linkelt - feltéve ha hibakeresésben is akarsz fejlődni.

Plusz infó:
- Nem releváns, mivel hoztad létre a képet, viszont
- Érdemes kipróbálni úgy, hogy feltöltöd public könyvtárba, és URL-ből éred el, php nélkül. Ha így is "rossz", akkor a fájl hibás, de ez nem zárja ki a Janoszen által írt esetleges php hibákat.
3

Nem

janoszen · 2017. Ápr. 20. (Cs), 18.45
Nem errol van szo, de kb nulla infoval nehez segiteni. Toltsd fel a forraskepet es a filet valahova es linkeld be, akkor meg tudjuk nezni. Ezen felul a bongeszo debug eszkozei is sokat mondanak, pl. hogy nulla byte-os a kimeneti kep vagy van-e benne adat.
5

Csak a firefox mond erre

pp · 2017. Ápr. 21. (P), 09.17
Csak a firefox mond erre hibát? Vagy egyik böngészőben se jelenik meg?
curl -OL <url>
letölti rendesen? ugyan az a fájl lesz méretben, tartalomban?

pp
6

Kép feltöltés

CzP · 2017. Ápr. 21. (P), 21.31
Igazatok van, elnézést.
Az Opera sem jeleníti meg a képet, ha benn van a kódban a fenti kódrészlet, akkor egy üres lap jelenik meg. A Firefox pedig azt mondja hogy hibás a kép és nem tudja megjeleníteni. A web developer-t telepítettem mint debug eszközt, azonban ez nem a hibás képről hanem a hibakiírás képéről ad infót.

Amit csinálni szeretnék:
Hőmérsékleteket mérek és az eredményt az adott berendezés képfájljába + Sqlite -ba beírom -ez egy python script ami jól működik, aktualizálja a képeket.
Ezeket a képeket szeretném első lépésként egy oldalon megjeleníteni úgy hogy mutassák az aktuális állapotot. Amikor új rekord van az adatbázisban akkor kellene a megfelelő képet kirakni az oldalra.

Az oldal kódja így néz ki - ha kiveszem az ominózus kódrészt akkor szépen működik:

<!doctype html>
<html lang="hu">
	<head>
		<meta charset="utf-8">
		<title>Rendszervezérlő</title>
		<style type="text/css" media="screen"></style>
	</head>
	<body>
		<img src="fejlec_1.jpg">
		<div>
			<a href="/almappa_1/beallitasok.html"><button type="button">BEÁLLÍTÁSOK</button></a>
			<a href="/almappa_1/statisztikak.php"><button type="button">STATISZTIKÁK</button></a>
			<a href="almappa_2/install.html"><button type="button">INSTALLÁCIÓ</button></a>
			<a href="/almappa_2/communication.html"><button type="button">KOMMUNIKÁCIÓ</button></a>
			<a href="index.html"><button type="button">KILÉPÉS</button></a>
		</div>
		<?php
		ini_set ('display_errors', 'On');
		error_reporting (E_ALL | E_STRICT);

		$kepek = ["boyler.jpg","puffer.jpg"];
		$previous_row = 0;
		
		try {$file_db = new PDO("sqlite:homerseklet.db"); } 
		catch (PDOException $e) { die ($e->getMessage()); }
		$sql = 'SELECT * FROM adatok ORDER BY nr DESC';
		$result = $file_db->query ($sql);
		$rowarray = $result->fetchall(PDO::FETCH_ASSOC);
		if ($rowarray[0]['nr'] != $previous_row) { $previous_row = $rowarray[0]['nr']; 
			$kepnr = $rowarray[0]['n'];
			$kep = $kepek[$kepnr];
			
			header ('Content-Type: image/jpeg');	
			$img = imagecreatefromjpeg($kep);
			imagejpeg($img);
			imagedestroy($img); }
		else { }
		?>
	</body>
</html>
A forrás xxx.jpg biztosan jó, mert HTML -ben direkt kiküldve <img src = "xxx.jpg"> jól megjelenik.
Mindenki egy könyvtárban lakik.

Üdv: Czp
7

Ahaaa'

janoszen · 2017. Ápr. 21. (P), 22.07
Na látod, így már mindjárt más a leányzó fekvése. A probléma ott van, hogy a Te kimenetedben keveredik a HTML és a bináris kép adat. (Vagyis beleírod a HTML forrásba a kép adatokat, amivel a böngésző nem tud mit kezdeni.)

Namost ezt három féle képpen lehet orvosolni:

1. Külön fájlba rakod a kép gyártását mint a HTML forrást.
2. data uri-val töltöd be a képet
3. JPG helyett SVG képet gyártasz és ezt közvetlenül beágyazhatod a HTML forrásba.

A 2. pont megoldása kb így nézne ki:

<img src="data:image/jpeg;base64,<?php
//Kimenet elkapás megkezdése
ob_start();

//Kép kiírás a fentieknek megfelelően
$img = imagecreatefromjpeg($kep);
imagejpeg($img);
imagedestroy($img);

//Kimenet megszerzése
$imgData = ob_get_contents();

// Kimenet törlése
ob_end_clean();

// Tartalom kódolása és kiírása
echo(base64_encode($imgData));
?>" />
Ez gyakorlatilag annyit csinál, hogy "elkapja" a kimentet mielőtt kimenne a böngészőnek és base64 kódolja. Így a böngésző a data:image/jpeg;base64, címelőtéttel együtt már tud vele mit kezdeni.

Viszont, ha jól látom semmit nem csinálsz a képpel, szóval akár egyszerűbben is lehet:

<img src="data:image/jpeg;base64,<?php
// Kép beolvasása, tartalom kódolása és kiírása
echo(base64_encode(file_get_contents($kep)));
?>" />
Sőt mi több, ha a kép a webről elérhető útvonalon van, akár ennyivel is meg lehetne úszni:

<img src="<?=htmlspecialchars($kep);?>" />
Ez azt feltételezi, hogy az adatbázisban a kép nevét tároltad el, nem pedig magát a képet. A nem releváns feldolgozó részeket természetesen kihagytam belőle.

Ezzel szemben, ha adhatok egy tanácsot, idővel ez a fajta gyúrjuk össze a PHP-t és a HTML-t megoldás nagyon meg fog szivatni. Ha ezen a téren akarsz tovább dolgozni, érdemes lesz megtanulni a megjelenítés és a működési logika elválasztását, sőt mi több, egy kicsit érdemes belekóstolni az MVC-be is. A Webtudoron annak idején jól kiveséztük a témát, de szép számmal találsz róla cikket is.
8

Köszönet

CzP · 2017. Ápr. 22. (Szo), 16.57
Valóban más lett a leányzó fekvése, ez a base64 kódolás csodát tett.
A további szívások számának csökkentése érdekében megnézem ezt az MVC dolgot is.
Köszönöm !
9

PHP

janoszen · 2017. Ápr. 22. (Szo), 19.20
Ha teheted, keruld a kepek kiszolgalasat PHP-n keresztul, inkabb linkeld be. SOKKAL gyorsabb ha nem kell a PHP-nak megcsamcsognia a kep adatokat.