Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP ( GD, Edycja obrazka, z MYSQL)
seba22
post
Post #1





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Witam,

Mam problem, ponieważ posiadam w bazie MYSQL, obrazek zakodowany w base64.

Wyciągam go sobie z serwera SQL i wstawiam w zmienną $contentz
  1. <?php
  2. $contentz = base64_decode($content);
  3. ?>


Ale kiedy próbuje wykonać operacje

  1. <?php
  2. $old_x=imageSX($src_img);
  3. $old_y=imageSY($src_img);
  4. ?>

Gdzie $src_img to pobrany z mysqla i zdekodowany obrazek... :/

  1. <?php
  2. Warningimagesx(: supplied argument is not a valid Image resource i
  3. ?>





Czy ma ktoś jakiś pomysł jak to rozwiązać, ewentualnie exclamation.gif!
Mam pomysł jak to obejść, ale czy ktoś może mi pomóc, jak zapisać do jpg, ten plik z mysql-a, i powiedzmy przez chwilkę przeprowadzić na nim operacje, a potem skasować ?


--------------------
Go to the top of the page
+Quote Post
Exek
post
Post #2





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

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


http://pl.php.net/manual/pl/function.image...efromstring.php

aha i nie musisz trzymac obrazkow w bazie danych zakodowanych base64, utwórz kolumnę BLOB (czy LONGBLOB już nie pamiętam) która służy do takich celów. Efekt to około 20-30% oszczędności miejsca.

Ten post edytował Exek 11.09.2008, 17:50:17
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

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


imagecreatefromstring" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
seba22
post
Post #4





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Witam,

Trzymam właśnie w kolumnie Long Blob.


Spróbowałem imagefromstring, ale dalej ten sam problem mi wyskakuje.

Tak wygląda teraz fragment kodu:


  1. <?php
  2. $contento = base64_decode($content);
  3. $contento = imagecreatefromstring($contento);
  4. createthumb($contento,'./tmp/'.$losowy_ciag.'.jpg',130,130);
  5. ?>



Wysypuje błędami:



Błąd, może nie poprawny ID ?
  1. <?php
  2. Warningimagesx(: supplied argument is not a valid Image resource in xxx
  3. Warningimagesy(: supplied argument is not a valid Image resource in xxx
  4. ?>

A te linie, są wywoływane przez createthumn, w formie funkcji która CAŁA wygląda TAK !

( zaznaczam że nie jestem jej autorem) ale na plikach nie z bazy SQL działa poprawnie.

  1. <?php
  2. function createthumb($name,$filename,$new_w,$new_h){
  3.    $system=explode('.',$name);
  4.    if (preg_match('/jpg|jpeg|JPG/',$system[1])){
  5.        $src_img=imagecreatefromjpeg($name);
  6.    }
  7.    if (preg_match('/png/',$system[1])){
  8.        $src_img=imagecreatefrompng($name);
  9.    }
  10.  
  11.    
  12. $old_x=imageSX($src_img);
  13. $old_y=imageSY($src_img);
  14. if ($old_x > $old_y) {
  15.    $thumb_w=$new_w;
  16.    $thumb_h=$old_y*($new_h/$old_x);
  17. }
  18. if ($old_x < $old_y) {
  19.    $thumb_w=$old_x*($new_w/$old_y);
  20.    $thumb_h=$new_h;
  21. }
  22. if ($old_x == $old_y) {
  23.    $thumb_w=$new_w;
  24.    $thumb_h=$new_h;
  25. }
  26. $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
  27.    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
  28.    
  29. if (preg_match("/png/",$system[1]))
  30. {
  31.    imagepng($dst_img,$filename);
  32. } else {
  33.    imagejpeg($dst_img,$filename);
  34. }
  35. imagedestroy($dst_img);
  36. imagedestroy($src_img);
  37. }
  38. ?>



A tak pobieram obrazek od usera:


  1. <?php
  2. $fhandle = fopen($_FILES['zdjecie']['tmp_name'], "r");
  3. $text=$_FILES['zdjecie']['name'];
  4.  
  5. $content = base64_encode(fread($fhandle, $_FILES['zdjecie']['size']));
  6. fclose($fhandle);
  7. ?>


W związku z czym mam go w base64 w zmiennej $content, i teraz tą zmienną chce wykonać miniaturkę....
I teraz chciał bym wygenerować mu miniaturkę, kodem który macie powyżej.

Może byście jeszcze na to zerkli, bo coś jest nie w porządku...


--------------------
Go to the top of the page
+Quote Post
Exek
post
Post #5





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

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


no ale popatrz się do funkcji createthumb, tam korzystasz z funkcji imagecreatefromjpg/png które za parametr chcą ścieżkę do pliku, a ty masz obrazek przechowywany w stringu.
Go to the top of the page
+Quote Post
seba22
post
Post #6





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Racja mistrzu,
Przepisałem te procedurę.

Mam jeszcze inne pytanie, bo robie potem konwersje kolorów.

I mam obrazek jpg w zmiennej $im
Chciał bym go zapisać do base64 ?
Czy można to zrobić bez zapisywania go na hdd ?

Próbowałem tak, ale niestety nie działa.

Kod
  imagejpeg($im, $miniatura);
  $miniatura=base64_encode($miniatura);


--------------------
Go to the top of the page
+Quote Post
Exek
post
Post #7





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

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


złap imagejpeg pomiędzy output buffering a potem to co złapałeś przypisz do zmiennej

hint:
ob_start(), ob_get_contents() i ob_end_clean()
Go to the top of the page
+Quote Post
seba22
post
Post #8





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Jak użyć tego parametru ?

Odgórnie, w PHP.ini ustawiłem sobie na buforowanie ( bo ciągle miałem problemy z wysyłaniem nagłówków).

Więc zamiast, stosować co chwila to buforowanie, to wrzuciłem je w bezpośrednio w dyrektywy php.


--------------------
Go to the top of the page
+Quote Post
Exek
post
Post #9





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

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


Jeśli masz problemy z wysyłaniem nagłówków (czyli tak na prawedę nie wiesz co gdzie się dzieje), to (nie obraź się) Twój kod jest o kant dupy potłuc. tongue.gif

A jak użyć tych funkcji jest bardzo dobrze napisane w manualu

Ten post edytował Exek 12.09.2008, 08:14:46
Go to the top of the page
+Quote Post
seba22
post
Post #10





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Wiem,
Ale wysyłam headery, np po środku tekstu.

Nie będę przepisywać kodu, tak żeby znacznik był na samej górze.

Przecież to jest chyba sensowne ?

Z jakiej racji, mamy sobie utrudniać życie.
Po to wprowadzili technologicznie buforowanie, żeby nie trzeba było pilnować, czy gdzieś nie mamy spacji... :/


--------------------
Go to the top of the page
+Quote Post
Exek
post
Post #11





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

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


buforowanie jest wprowadzone żeby móc wykonać pewne czynności, a nie żeby propagować złe nawyki kodowania.

Z tego co widzę to mieszasz całe MVC w jednym pliku. Jeśli chcesz dobrze kodować to zainteresuj się tymi magicznymi literkami, no chyba że chcesz dalej "dziadować".
Go to the top of the page
+Quote Post
seba22
post
Post #12





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Pewne czynności, właśnie do nich, to wykożytuje.

Dobra mistrzu.


No to jak mam użyć tego ob ?

gdzie $im ( obrazek)

  1. <?php
  2.  
  3. imagejpeg($im, $miniatura);
  4.  
  5. $miniatura = ob_get_contents();
  6.  
  7. ?>

Będzie dobrze ?


--------------------
Go to the top of the page
+Quote Post
Exek
post
Post #13





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

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


tak, powinno działać
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 18:20