Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tworzenie obrazków nie działa, generowanie przez kopiowanie obrazka blabla.php?id=08
mikolodz
post
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..
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
bigZbig
post
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.
Go to the top of the page
+Quote Post
mikolodz
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 25.09.2010

Ostrzeżenie: (0%)
-----


Cytat(bigZbig @ 26.09.2010, 14:20:51 ) *
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!
Go to the top of the page
+Quote Post
fander
post
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ść ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 23:59