Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 25.09.2010 Ostrzeżenie: (0%)
|
Witam,
widzę, że problem, który opisałem wczoraj w dziale MySQL nie jest taki prosty jak się spodziewałem Nie działało mi wyświetlanie obrazków przechowywanych w BLOBIE. Niestety po zmianie sposobu zapisu na zapisywanie na serwerze, które notabene działa bardzo ładnie, ze zmianą rozmiaru formatu itp., nadal mam problem z wyświetlaniem obrazków. taki skrypt u mnie nie działa, mimo, że generowanie i zapisanie na serwerze sie spisuje: (zawartosc pliku generuj.php) Kod <? header("Content-type: image/gif"); $obrazek = ImageCreate(80,40); ImageGif($obrazek); ImageDestroy($obrazek); ?> po otworzeniu tego pliku uzyskuje informacje: Cytat Obrazek "http://mojserwer/generuj.php" nie może zostać wyświetlony, ponieważ zawiera błędy. To samo dzieje się kiedy robię: showavatar.php?id=mysikun Kod <? include ('funkcje_glowne.php'); $db = polaczZBaza(); $id = $_GET['id']; $zapytanie = "select avatar from `avatars` where id='$id'"; $wynik = $db -> query($zapytanie); if(($wynik -> num_rows) != 0){ $wiersz = $wynik -> fetch_assoc(); $nazwa = $wiersz['avatar']; $sciezka = "upload/".$nazwa; $img = imagecreatefromjpeg($sciezka); header("Content-type: image/jpeg"); imagejpeg($img); } $db -> close(); ?> uzyskuję także ten sam komunikat. chciałem wcześniej wyświetlać te obrazki w innym pliku "pokazavatar.php" poprzez: <img scr="showavatar.php?id='.$id.'"/>"; ale oczywiście nie może to działać. Proszę wskażcie mi mój błąd, bo straciłem na to zagadnienie blisko dobę i na prawdę nie mogę znaleźć błędu. Czemu przy wyświetlaniu wygenerowanych obrazków wyskakuje mi błąd? Generowanie i zapis przebiegają poprawnie np ten kod działa: Kod <? $db = polaczZBaza(); // wczeczniej SĄ PODANE zmienne nazwa itp $sciezka = "upload/".$nazwa; if($sp[1] == "jpeg"){ // Sprawdzamy jakie rozszerzenie miał plik i wykonujemy dla niego nowy obrazek; $img = imagecreatefromjpeg($sciezka); } elseif($sp[1] == "png") { $img = imagecreatefrompng($sciezka); } elseif($sp[1] == "jpg") { $img = imagecreatefromjpeg($sciezka); } elseif($sp[1] == "gif") { $img = imagecreatefromgif($sciezka); } $a = imagesx($img); // pobieramy szerokość i wysokość $b = imagesy($img); if($a > $b){ //Zmieniamy wielkość obrazka w tym wypadku szerokość musi być 150 a wysokość proporcjonalna. $na = 150; $nb = 150 * ($b / $a); }elseif($a < $b){ $na = 150 * ($a / $b); $nb = 150; }else{ $na = 150; $nb = 150; } $new_img = imagecreatetruecolor($na, $nb); // tworzymy nowy obrazek o danych wymiarach $cz = ImageColorAllocate($new_img,8 ,24 ,40); // tworzenie koloru. atrybuty to kolejno nowy obrazek i 3 kolory RGB - Red Green Blue ImageFill($new_img,1,1,$cz); // tworzenie tła obrazka imagecopyresampled($new_img, $img, 0, 0, 0, 0, $na, $nb, $a, $b); $s = explode(".",$nazwa); unlink('upload/'.$nazwa); // usuwamy poprzedni plik avataru użytkownika @imagejpeg($new_img, "upload/".$s[0].".jpg", 100); // cyfra 9 oznacza jakosc miniaturki, osobiscie polecam wartosc 100 $sciezka_do_pliku2 = "upload/".$s[0].".jpg"; $db -> query("UPLOAD avatars SET avatar='$sciezka_do_pliku2' where id='$id'"); $db -> close(); } } ?> Po zapisie na serwerze plik ma wszystkie zadane parametry i się normalnie otwiera. Proszę o pomoc.. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Skoro obrazki generują się dobrze i po zapisaniu ich na serwer nie ma problemu winnym nie jest sam skrypt generujący obrazki tylko sposób wysyłania ich do przeglądarki. Upewnij się, że zwracając wynik do przeglądarki nie przesyłasz jakiś niepotrzebnych znaków(np. zanków BOM) lub nagłówków. Zalecaną praktyką jest pomijanie na końcu skryptów php znaku kończącego blok php '?>' oraz buforowanie wyniku przy pomocy funkcji ob_start.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 25.09.2010 Ostrzeżenie: (0%)
|
Skoro obrazki generują się dobrze i po zapisaniu ich na serwer nie ma problemu winnym nie jest sam skrypt generujący obrazki tylko sposób wysyłania ich do przeglądarki. Upewnij się, że zwracając wynik do przeglądarki nie przesyłasz jakiś niepotrzebnych znaków(np. zanków BOM) lub nagłówków. Zalecaną praktyką jest pomijanie na końcu skryptów php znaku kończącego blok php '?>' oraz buforowanie wyniku przy pomocy funkcji ob_start. Dziękuję za cenne rady!! (IMG:style_emoticons/default/smile.gif) Faktycznie kod był w porządku. Obszedłem problem przesyłania kodu obrazków do wyszukiwarki generując je na bieżąco funkcją. jeśli chodzi o sam sposób w jaki to zrobiłem - utworzyłem funkcję, która bierze obrazek użytkownika z kat. upload, nakłada go na mój firmowy obrazek z przeźroczystością i na koniec zapisuje to 'combo' w tymczasowym pliku avatar.png. Wyświetla go przez <img src="avatar.png"/> także w tej sytuacji wilk syty i owca cała. Nie ma dostępu do samych avatarów, nikt nie wie gdzie są przechowywane, a w postaci końcowej występują tylko po wygenerowaniu na bieżąco, dzięki czemu nie tracę przestrzeni dyskowej, bo obrazek który zajmuje przed przerobieniem 18KB, po przerobieniu nieco ponad 40KB. Nie spodziewam się takiego ruchu, żeby mógł przez to obciążyć zbyt serwer, aczkolwiek biorę pod uwagę możliwość, że mój pomysł jest nie najlepszy. dla osób, które chcą coś takiego zrobić przesyłam kod: Kod <? $db = polaczZBaza(); $zapytanie = "select avatar from avatars where id='$id'"; // pobieramy z bazy danych NAZWĘ PLIKU avatara osoby o id = $id $wynik = $db -> query($zapytanie); $wiersz = $wynik -> fetch_assoc(); $nazwa = $wiersz['avatar']; $sciezka = "upload/".$nazwa; $bcg = imagecreatefrompng('herb.png'); // moje logo $img = imagecreatefromjpeg($sciezka); // avatar usera $wysokosc = imagesy($img); // wysokosc obrazka, aby umiescic na srodku $szerokosc = imagesx($img); // szerokosc obrazka $przesunieciey = (imagesy($bcg) - $wysokosc)/2 * -1; //zeby był wyjustowany w pionie i poziomie $przesunieciex = (imagesx($bcg) - $szerokosc)/2 * -1; imagecopymerge($bcg, $img, 0, 0, $przesunieciex, $przesunieciey, imagesx($bcg), imagesy($bcg), 80); //nałożenie avatara na moje logo imagepng($bcg, 'avatar.png', 9); // zapisanie nowo wygenerowanego pliczku do avatar.png echo '<br /><br /><img src="avatar.png" alt="'.$id.'"/>'; // wyswietlenie okienka z obrazkiem ?> oczywiście przydałyby się tam jeszcze jakieś zabezpiecznia w przypadku problemów z połączeniem itp, ale to już każdy sobie indywidualnie może napisać. pozdrawiam, a temat wg mnie nie jest jeszcze zamknięty, bo nadal nie wiem czemu obrazki pierwszym sposobem sie nie wyświetlały. wypróbuję metodę bigZbiga i zobaczymy czy wyskoczy jakaś wskazówka.. dziekuje za pomoc! |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 231 Pomógł: 22 Dołączył: 6.10.2008 Ostrzeżenie: (0%)
|
Jak to kolego glaczego, do przeglądarki wysyłasz
header("Content-type: image/gif") czyli gif a w skrypcie generujesz jpeg @imagejpeg($new_img, "upload/".$s[0].".jpg", 100);, więc coś tutaj nie jest tak, skoro powieszałeś przeglądarce że ma jeść 1 danie to sobie przygotowała łyżkę a tu nagle dostaje schabowego z frytkami, i jak to zjeść ? |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 23:59 |