Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

Zapsywanie obrazka png z kodu

Zaczynasz dopiero swoją przygodę z HTML'em? A może mimo swojego doświadczenia natknąłeś się na jakiś problem? Tutaj na pewno znajdziesz pomoc.

Re: Zapsywanie obrazka png z kodu

Post 11.02.2018, 23:31:30

Jeszcze jedno muszę zrobić a mianowicie muszę dodać zewnętrzne ikony pogodynki w formacie svg odpowiadające nazwie pobieranej z bazy danych mysql. Czy jest to możliwe?
Próbuję to zrobić za pomocą tablicy array ale coś nie wychodzi.
Coś na zasadzie
Kod: Zaznacz cały
$icon=array(
'clear-day'          => "ikona1.svg",
'clear-night'       => "ikona2.svg",
'rain'             => "ikona3.svg",
'snow'          => "ikona4.svg",
'sleet'          => "ikona5.svg",
'wind'          => "ikona6.svg",
'fog'             => "ikona7.svg",
);

Potem otworzyć ją za pomocą
Kod: Zaznacz cały
$ikona = ''.$icon[($row['wicon'])].'';
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 11.02.2018, 23:58:33

Podany kod nie ma szans działać. Z dwóch powodów:
1. W kodzie, który mamy rysujemy znaki z fonta za pomocą imagettftext, dlatego podanie ścieżki do pliku jako parametr $text tej funkcji po prostu wypisze ten tekst za pomocą podanego fonta
2. Funkcje modułu GD, z których korzystaliśmy do tej pory, nie potrafią rysować grafik SVG. Musisz poszukać skryptów/bibliotek napisanych przez innych programistów, które takie coś oferują. Możesz spróbować użyć np. tego, przekonwerować wektory do obrazka rastrowego (metoda toRasterImage) i potem ten obrazek narysować na swojej pogodynce za pomocą [m]imagecopy[/url].
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 12.02.2018, 19:58:15

Ok za pomocą strony https://icomoon.io/app/#/select generuję ikonkę svg do formatu czcionki ale mam problem aby kolor pozostał ikony taki jak jest czyli w przypadku słoneczka pomarańczowy
http://brzanek.webd.pl/2017/obrazek/ikon_font/demo.html
Po dodaniu kodu ikony
Kod: Zaznacz cały
\u{e900}

bez podania koloru w tym miejscu
Kod: Zaznacz cały
imagettftext($im, 40, 0, 381, 610, $fonticon, $ikona);

Ikona się nie wyświetla.
W przypadku słoneczka to nie problem ale jak chcę dać ikonkę z chmurkę w kolorze niebieskim i do tego pół słoneczka pomarańczowego to jest problem.
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 12.02.2018, 20:16:44

Właśnie zobaczyłem że ikonka np. chmurka ze słoneczkiem
http://brzanek.webd.pl/2017/obrazek/ikon_font/demo.html icon-d2 składa się nie z jednej ikony tylko w tym przypadku z dwóch ikon chmurka + słoneczko
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 12.02.2018, 20:29:57

brzanek napisał(a):Ok za pomocą strony https://icomoon.io/app/#/select generuję ikonkę svg do formatu czcionki ale mam problem aby kolor pozostał ikony taki jak jest czyli w przypadku słoneczka pomarańczowy

no niestety, format TTF ma swoje ograniczenia. W poprzednim poście dałem alternatywne rozwiązanie co do obrazków SVG.
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 12.02.2018, 20:39:41

Tak widziałem ale nie wiem jak się za to zabrać.
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 14:53:58

1. Jeśli korzystasz z composera, to zainstaluj za jego pomocą tę bibliotekę. W przeciwnym wypadku pobierasz repozytorium (https://github.com/meyfa/php-svg) i wstawiasz do swojej aplikacji. Link do ZIPa znajdziesz w Readme.
2. W swoim kodzie, gdzie chcesz skorzystać z biblioteki wstawiasz
Kod: Zaznacz cały
require_once __DIR__.'/<path_where_you_put_it>/autoloader.php';

3. Potem dajesz
Kod: Zaznacz cały
use SVG\SVGImage;
$svg = SVGImage::fromFile('plik.svg');
$img = $svg->toRasterImage(100,100); // ustawiasz wymagane przez ciebie wymiary

4. To co masz w zmiennej $img, możesz użyć to narysowania na mapce za pomocą wspomnianej wcześniej funkcji imagecopy.

(nie sprawdzałem czy powyższe działa. Musisz sam poeksperymentować)
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 17:22:13

Niestety coś mi nie działa
Dodałem bibliotekę do kodu
Kod: Zaznacz cały
require_once('meyfa-php-svg/autoloader.php');

Potem dodałem do kodu to
Kod: Zaznacz cały
use SVG\SVGImage;
$svg = SVGImage::fromFile('http://brzanek.webd.pl/ikony_svg/14_d.svg');
$img = $svg->toRasterImage(100,100); // ustawiasz wymagane przez ciebie wymiary

Na koniec nie wiem czy dobrze dodałem funkcję
Kod: Zaznacz cały
imagecopy($im, $img, 0, 0, 20, 13, 80, 40);

Po odświeżeniu strony nowy obrazek nie zapisuje się.
Przypomnę tylko że te obrazki muszą być różne w zależność od tego co jest pobierane z bazy danych mysql.
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 18:08:04

Z podanymi informacjami nic nie zdziałam. "Nie działa" nic nie mówi. Włącz logowanie błędów, loguj je do pliku i sprawdzaj gdzie się sypie.

Co do wymiarów do możesz odczytać te zdefiniowane w pliku svg

Kod: Zaznacz cały
$width = $svg->getDocument()->getWidth();
$height = $svg->getDocument()->getHeight();
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 18:36:01

Ok włączyłem wykaz błędów
Pojawia się jeden
Parse error: syntax error, unexpected 'use' (T_USE) in /home/brzanek/public_html/2017/obrazek/test1.php on line 48
Czyli
Kod: Zaznacz cały
use SVG\SVGImage;
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 19:38:19

Taki sposób w oddzielnym pliku działa
Kod: Zaznacz cały
<?php
require_once __DIR__.'/meyfa-php-svg/autoloader.php';
use SVG\SVGImage;
$image = SVGImage::fromFile("http://brzanek.webd.pl/ikony_svg/14_d.svg");
//$img = $image->toRasterImage(100,100); // ustawiasz wymagane przez ciebie wymiary
header('Content-Type: image/svg+xml');
echo $image;

Ale jak dodam do tego to
Kod: Zaznacz cały
$img = $image->toRasterImage(100,100); // ustawiasz wymagane przez ciebie wymiary

To już się sypie.
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 22:01:11

brzanek napisał(a):To już się sypie.
z jakim błędem?

Co do błedu

Kod: Zaznacz cały
Parse error: syntax error, unexpected 'use' (T_USE) in /home/brzanek/public_html/2017/obrazek/test1.php on line 48

to PHP ma ograniczenia co do tego, gdzie w kodzie można użyć "use". Musiałbym widzieć kod, żeby wiedzieć dlaczego w twoim przypadku nie działa. Zamiast use, możesz też spróbować bezpośrednio $svg = SVG\SVGImage::fromFile('plik.svg')
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 13.02.2018, 22:21:38

Tak wygląda kod
Kod: Zaznacz cały
<?php
?>
<link href="https://cdnjs.cloudflare.com/ajax/libs/weather-icons/2.0.5/css/weather-icons.min.css" rel="stylesheet">
<link href="http://brzanek.webd.pl/28082017/prognoza/darksky/css/mapa_dzis.css" rel="stylesheet">

<?
include('db.php');
require_once __DIR__.'/meyfa-php-svg/autoloader.php';
use SVG\SVGImage;
$image = SVGImage::fromFile("http://brzanek.webd.pl/ikony_svg/14_d.svg");
//$img = $image->toRasterImage(100,100); // ustawiasz wymagane przez ciebie wymiary
header('Content-Type: image/svg+xml');
//echo $image;
{
$t=time();
// Create a destination
$dest = "images/test".date("d_m_Y").".jpg";
// Get contents from original spot
$im = imagecreatefromjpeg("images/NIEBIESKA_MAPA.jpg");

$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
$blue = imagecolorallocate($im, 79, 166, 245);
$red = imagecolorallocate($im, 255, 0, 0);
$bluemin = imagecolorallocate($im, 0, 90, 224);

// Save to disk in the new spot and name

$dzien["Monday"] = "Poniedziałek";
$dzien["Tuesday"] = "Wtorek";
$dzien["Wednesday"] = "Środa";
$dzien["Thursday"] = "Czwartek";
$dzien["Friday"] = "Piątek";
$dzien["Saturday"] = "Sobota";
$dzien["Sunday"] = "Niedziela";
 
$icon=array(
'clear-day'          => "\u{f00d}",
'clear-night'          => "\u{f02e}",
'rain'                => "\u{f019}",
'snow'                => "\u{f01b}",
'sleet'             => "\u{f0b5}",
'wind'                => "\u{f050}",
'fog'                => "\u{f014}",
'cloudy'             => "\u{f013}",
'partly-cloudy-day'    => "\u{f002}",
'partly-cloudy-night'    => "\u{f031}",
);   

$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =1 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
   
$text = ''.$dzien[date("l", $row['wtime'])].' '.date("d/m/Y", $row['wtime']).'';
$tempmax = ''.$row['wtemperatureMax'].'';
$tempmin = ''.$row['wtemperatureMin'].'';
$ikona = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =2 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax1 = ''.$row['wtemperatureMax'].'';
$tempmin1 = ''.$row['wtemperatureMin'].'';
$ikona1 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =3 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax2 = ''.$row['wtemperatureMax'].'';
$tempmin2 = ''.$row['wtemperatureMin'].'';
$ikona2 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =5 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax3 = ''.$row['wtemperatureMax'].'';
$tempmin3 = ''.$row['wtemperatureMin'].'';
$ikona3 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =4 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax4 = ''.$row['wtemperatureMax'].'';
$tempmin4 = ''.$row['wtemperatureMin'].'';
$ikona4 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =24 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax5 = ''.$row['wtemperatureMax'].'';
$tempmin5 = ''.$row['wtemperatureMin'].'';
$ikona5 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =27 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax6 = ''.$row['wtemperatureMax'].'';
$tempmin6 = ''.$row['wtemperatureMin'].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =12 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax7 = ''.$row['wtemperatureMax'].'';
$tempmin7 = ''.$row['wtemperatureMin'].'';
$ikona7 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =13 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax8 = ''.$row['wtemperatureMax'].'';
$tempmin8 = ''.$row['wtemperatureMin'].'';
$ikona8 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =8 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax9 = ''.$row['wtemperatureMax'].'';
$tempmin9 = ''.$row['wtemperatureMin'].'';
$ikona9 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =35 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax10 = ''.$row['wtemperatureMax'].'';
$tempmin10 = ''.$row['wtemperatureMin'].'';
$ikona10 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =31 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax11 = ''.$row['wtemperatureMax'].'';
$tempmin11 = ''.$row['wtemperatureMin'].'';
$ikona11 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =10 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax12 = ''.$row['wtemperatureMax'].'';
$tempmin12 = ''.$row['wtemperatureMin'].'';
$ikona12 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =6 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax13 = ''.$row['wtemperatureMax'].'';
$tempmin13 = ''.$row['wtemperatureMin'].'';
$ikona13 = ''.$icon[($row['wicon'])].'';
}
$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =9 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$tempmax14 = ''.$row['wtemperatureMax'].'';
$tempmin14 = ''.$row['wtemperatureMin'].'';
$ikona14 = ''.$icon[($row['wicon'])].'';
}
// Replace path by your own font path
$font = 'arial.ttf';
$fonticon = '/weather-icons-master/font/weathericons-regular-webfont.ttf';

imagettftext($im, 24, 0, 11, 31, $blue, $font, $text);
imagettftext($im, 18, 0, 311, 590, $red, $font, $tempmax);
imagettftext($im, 18, 0, 311, 625, $bluemin, $font, $tempmin);
imagettftext($im, 40, 0, 381, 610, $grey, $fonticon, $ikona);

imagettftext($im, 18, 0, 98, 370, $red, $font, $tempmax1);
imagettftext($im, 18, 0, 98, 405, $bluemin, $font, $tempmin1);
imagettftext($im, 40, 0, 168, 390, $grey, $fonticon, $ikona1);

imagettftext($im, 18, 0, 510, 210, $red, $font, $tempmax2);
imagettftext($im, 18, 0, 510, 245, $bluemin, $font, $tempmin2);
imagettftext($im, 40, 0, 580, 230, $grey, $fonticon, $ikona2);

imagettftext($im, 18, 0, 590, 490, $red, $font, $tempmax3);
imagettftext($im, 18, 0, 590, 525, $bluemin, $font, $tempmin3);
imagettftext($im, 40, 0, 510, 520, $grey, $fonticon, $ikona3);

imagettftext($im, 18, 0, 60, 170, $red, $font, $tempmax4);
imagettftext($im, 18, 0, 60, 205, $bluemin, $font, $tempmin4);
imagettftext($im, 40, 0, 130, 190, $grey, $fonticon, $ikona4);

imagettftext($im, 18, 0, 40, 630, $red, $font, $tempmax5);
imagettftext($im, 18, 0, 40, 665, $bluemin, $font, $tempmin5);
imagettftext($im, 40, 0, 110, 650, $grey, $fonticon, $ikona5);

imagettftext($im, 18, 0, 160, 540, $red, $font, $tempmax6);
imagettftext($im, 18, 0, 170, 575, $bluemin, $font, $tempmin6);

imagettftext($im, 18, 0, 280, 440, $red, $font, $tempmax7);
imagettftext($im, 18, 0, 280, 475, $bluemin, $font, $tempmin7);
imagettftext($im, 40, 0, 350, 460, $grey, $fonticon, $ikona7);

imagettftext($im, 18, 0, 600, 300, $red, $font, $tempmax8);
imagettftext($im, 18, 0, 600, 335, $bluemin, $font, $tempmin8);
imagettftext($im, 40, 0, 670, 320, $grey, $fonticon, $ikona8);

imagettftext($im, 18, 0, 500, 400, $red, $font, $tempmax9);
imagettftext($im, 18, 0, 510, 435, $bluemin, $font, $tempmin9);

imagettftext($im, 18, 0, 190, 250, $red, $font, $tempmax10);
imagettftext($im, 18, 0, 190, 285, $bluemin, $font, $tempmin10);

imagettftext($im, 18, 0, 300, 320, $red, $font, $tempmax11);
imagettftext($im, 18, 0, 300, 355, $bluemin, $font, $tempmin11);
imagettftext($im, 40, 0, 370, 340, $grey, $fonticon, $ikona11);

imagettftext($im, 18, 0, 380, 110, $red, $font, $tempmax13);
imagettftext($im, 18, 0, 380, 145, $bluemin, $font, $tempmin13);
imagettftext($im, 40, 0, 450, 130, $grey, $fonticon, $ikona13);

imagettftext($im, 18, 0, 530, 40, $red, $font, $tempmax14);
imagettftext($im, 18, 0, 530, 75, $bluemin, $font, $tempmin14);
imagettftext($im, 40, 0, 600, 60, $grey, $fonticon, $ikona14);

imagejpeg($im,$dest, 100);
// Destroy image
imagedestroy($im);
}

Na stronie pojawia się taki błąd.
Błąd przetwarzania XML: nie znaleziono głównego elementu
Obszar: http://brzanek.webd.pl/2017/obrazek/test4.php
Numer wiersza: 4, kolumna 1:
^
http://brzanek.webd.pl/2017/obrazek/test4.php
A tak wygląda generowany obrazek
http://brzanek.webd.pl/2017/obrazek/ima ... 2_2018.jpg
Jak widać nie pojawia się odpowiednia ikona http://brzanek.webd.pl/ikony_svg/14_d.svg
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 14.02.2018, 16:02:04

Bład na stronie powodowany jest tym
Kod: Zaznacz cały
header('Content-Type: image/svg+xml');

nakazujesz przeglądarce traktować treść jako XML/SVG, więc przeglądarka tak traktuje, a że wysłana treść jest niezgodna z XMLem, to przeglądarka wyświetla błąd, bo tak został zaprojektowany XML - nie wybacza błędów.

jak widać nie pojawia się odpowiednia ikona

widzę inną dwu-kolorową ikonkę. Jeśli pojawia się zła ikonka, to problem jest w logice twojego kodu.
W kodzie, który podałeś jest zakomentowane generowanie bitmapy z SVG i nie ma poleceń do rysowania tego obrazka na mapce, nadal masz "use SVG\SVGImage" prawdopodobnie w niedozwolonym miejscu.
W obecnej formie szkoda mojego czasu na analizę problemu. Pokaż kod w ostatniej możliwej formie i opisz jego problemy - co działa, co nie działa, jakie błędy generuje.
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 14.02.2018, 20:43:10

Widzisz kolorowa ikona na dole jest sztywna na obrazku mapy bez danych z pogodą - zobacz.
Obrazek
Tak wygląda kod strony (wywaliłem wszystkie ikony zostawiłem tylko jedną pod miejscowością Choszczno)
Kod: Zaznacz cały
<?php
?>
<link href="https://cdnjs.cloudflare.com/ajax/libs/weather-icons/2.0.5/css/weather-icons.min.css" rel="stylesheet">
<link href="http://brzanek.webd.pl/28082017/prognoza/darksky/css/mapa_dzis.css" rel="stylesheet">

<?
include('db.php');
require_once __DIR__.'/meyfa-php-svg/autoloader.php';
use SVG\SVGImage;
$image = SVGImage::fromFile("http://brzanek.webd.pl/ikony_svg/14_d.svg");
//$img = $image->toRasterImage(100,100); // ustawiasz wymagane przez ciebie wymiary
header('Content-Type: image/svg+xml');
{
$t=time();
// Create a destination
$dest = "images/test_ikonasvg.jpg";
// Get contents from original spot
$im = imagecreatefromjpeg("images/NIEBIESKA_MAPA.jpg");

$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
$blue = imagecolorallocate($im, 79, 166, 245);
$red = imagecolorallocate($im, 255, 0, 0);
$bluemin = imagecolorallocate($im, 0, 90, 224);

// Save to disk in the new spot and name

$dzien["Monday"] = "Poniedziałek";
$dzien["Tuesday"] = "Wtorek";
$dzien["Wednesday"] = "Środa";
$dzien["Thursday"] = "Czwartek";
$dzien["Friday"] = "Piątek";
$dzien["Saturday"] = "Sobota";
$dzien["Sunday"] = "Niedziela";
 
$icon=array(
'clear-day'          => "\u{f00d}",
'clear-night'          => "\u{f02e}",
'rain'                => "\u{f019}",
'snow'                => "\u{f01b}",
'sleet'             => "\u{f0b5}",
'wind'                => "\u{f050}",
'fog'                => "\u{f014}",
'cloudy'             => "\u{f013}",
'partly-cloudy-day'    => "\u{f002}",
'partly-cloudy-night'    => "\u{f031}",
);   

$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =1 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
   
$text = ''.$dzien[date("l", $row['wtime'])].' '.date("d/m/Y", $row['wtime']).'';
$tempmax = ''.$row['wtemperatureMax'].'';
$tempmin = ''.$row['wtemperatureMin'].'';
$ikona = ''.$icon[($row['wicon'])].'';
}
// Replace path by your own font path
$font = 'arial.ttf';
$fonticon = '/weather-icons-master/font/weathericons-regular-webfont.ttf';

imagettftext($im, 24, 0, 11, 31, $blue, $font, $text);
imagettftext($im, 18, 0, 311, 590, $red, $font, $tempmax);
imagettftext($im, 18, 0, 311, 625, $bluemin, $font, $tempmin);
imagettftext($im, 40, 0, 381, 610, $grey, $fonticon, $ikona);

imagejpeg($im,$dest, 100);
// Destroy image
imagedestroy($im);
}

Po wywołaniu tej strony pojawia się błąd
Kod: Zaznacz cały
Błąd przetwarzania XML: nie znaleziono głównego elementu
Obszar: http://brzanek.webd.pl/2017/obrazek/test4.php
Numer wiersza: 4, kolumna 1:
^

http://brzanek.webd.pl/2017/obrazek/test4.php
Obrazek nadpisuje się ale nie ma na nim obrazka svg
Obrazek
Ikona svg
http://brzanek.webd.pl/ikony_svg/14_d.svg
Chciałbym aby zamiast ikony co jest pod Choszcznem pojawiła się ikona svg oczywiście odpowiednia jaką generuje nazwę baza danych mysql ale to w kolejnym etapie. Najpierw jak ją wyświetlić na generowanym obrazku.
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 14.02.2018, 21:17:22

Wywaliłem to
Kod: Zaznacz cały
header('Content-Type: image/svg+xml');

i problem po wywołaniu strony zniknął.
Jeszcze jedno jak
Kod: Zaznacz cały
imagettftext($im, 40, 0, 381, 610, $grey, $fonticon, $ikona);

zmienię na
Kod: Zaznacz cały
imagettftext($im, 40, 0, 381, 610, $grey, $fonticon, $image);

to zamiast ikony poprzedniej mam coś takiego
Obrazek
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 14.02.2018, 22:04:24

Czy w zmiennej $image masz wynik wykonania $svg->toRasterImage() ?
Jeśli tak, to jak pisałem, powinieneś użyć funkcji imagecopy, żeby przerysować obraz $image na obraz $im.
imagettftext służy do pisania tekstu na obrazku z użyciem podanego fonta… czyli nie nasz przypadek.
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19715
Dołączył(a): 14.04.2002

Re: Zapsywanie obrazka png z kodu

Post 15.02.2018, 07:51:31

Ok zamiast tego
Kod: Zaznacz cały
imagettftext($im, 40, 0, 381, 610, $grey, $fonticon, $image);

dodałem to
Kod: Zaznacz cały
imagecopy($im, $image, 370, 590, 381, 610, 100, 100);

Ale właśnie w tej linii pojawia się błąd
Warning: imagecopy() expects parameter 2 to be resource, object given in /home/brzanek/public_html/2017/obrazek/test4.php on line 66
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Re: Zapsywanie obrazka png z kodu

Post 15.02.2018, 18:59:51

Troszkę zmodyfikowałem kod
Kod: Zaznacz cały
<?php
?>
<link href="https://cdnjs.cloudflare.com/ajax/libs/weather-icons/2.0.5/css/weather-icons.min.css" rel="stylesheet">
<link href="http://brzanek.webd.pl/28082017/prognoza/darksky/css/mapa_dzis.css" rel="stylesheet">

<?
include('db.php');
require_once __DIR__.'/meyfa-php-svg/autoloader.php';
use SVG\SVGImage;
{
$t=time();
// Create a destination
$dest = "images/test_ikonasvgg.jpg";
// Get contents from original spot
$im = imagecreatefromjpeg("images/NIEBIESKA_MAPA.jpg");
$x = 100;
$y = 100;
$imagee = SVGImage::fromFile("http://brzanek.webd.pl/ikony_svg/14_d.svg");
$img = $imagee->toRasterImage($x, $y); // ustawiasz wymagane przez ciebie wymiary

$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
$blue = imagecolorallocate($im, 79, 166, 245);
$red = imagecolorallocate($im, 255, 0, 0);
$bluemin = imagecolorallocate($im, 0, 90, 224);

// Save to disk in the new spot and name

$dzien["Monday"] = "Poniedziałek";
$dzien["Tuesday"] = "Wtorek";
$dzien["Wednesday"] = "Środa";
$dzien["Thursday"] = "Czwartek";
$dzien["Friday"] = "Piątek";
$dzien["Saturday"] = "Sobota";
$dzien["Sunday"] = "Niedziela";
 
$icon=array(
'clear-day'          => "\u{f00d}",
'clear-night'          => "\u{f02e}",
'rain'                => "\u{f019}",
'snow'                => "\u{f01b}",
'sleet'             => "\u{f0b5}",
'wind'                => "\u{f050}",
'fog'                => "\u{f014}",
'cloudy'             => "\u{f013}",
'partly-cloudy-day'    => "\u{f002}",
'partly-cloudy-night'    => "\u{f031}",
);   

$result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =1 ORDER BY id ASC LIMIT 1");
while ( $row = mysqli_fetch_array($result) ) {
$text = ''.$dzien[date("l", $row['wtime'])].' '.date("d/m/Y", $row['wtime']).'';
$tempmax = ''.$row['wtemperatureMax'].'';
$tempmin = ''.$row['wtemperatureMin'].'';
$ikona = ''.$icon[($row['wicon'])].'';
}
// Replace path by your own font path
$font = 'arial.ttf';
$fonticon = '/weather-icons-master/font/weathericons-regular-webfont.ttf';

imagettftext($im, 24, 0, 11, 31, $blue, $font, $text);
imagettftext($im, 18, 0, 311, 590, $red, $font, $tempmax);
imagettftext($im, 18, 0, 311, 625, $bluemin, $font, $tempmin);
//imagettftext($im, 40, 0, 381, 610, $grey, $fonticon, $image);
header('Content-Type: image/svg+xml');
imagecopy($im, $img, 190, 190, 290, 290, 100, 100);
imagejpeg($im, $dest, 100);
// Destroy image
imagedestroy($im);
}

Teraz po wywołaniu tego pojawia się błąd co poprzednim razem
Błąd przetwarzania XML: nie znaleziono głównego elementu
Obszar: http://brzanek.webd.pl/2017/obrazek/test4.php
Numer wiersza: 8, kolumna 1:
^
A na mapie pojawia się czarny kwadrat o wymiarach 100x100 w miejscu wskazanym w parametrach funkcji imagecopy
brzanek
Posty: 44
Dołączył(a): 22.11.2013

Poprzednia strona

Powrót do Początkujący webmaster


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

Hosting, Domeny, SSL

Subskrypcja

Mamy 51196 zarejestrowanych użytkowników.
Najnowszy użytkownik: AngelaTh


Nasi użytkownicy napisali:

  • 936894 wiadomości
  • w 247060 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)